مدل برنامه نویسی

در این مستند یاد می گیریم چطور کد مربوط به یک تابع در سرویس رایانش را بنویسیم، چه امکاناتی هنگام اجرای درخواست داریم و چه نکاتی را بهتر است هنگام نوشتن توابع هندلر رعایت کنیم.

پیش‌نیازها

  1. در صورتی که با سرویس رایانش آشنایی ندارید، به معرفی سرویس رایانش مراجعه کنید.
  2. در صورتی که با برنامه‌نویسی به زبان NodeJs آشنایی ندارید، به آشنایی با NodeJs مراجعه کنید.
  3. در صورتی که هنوز با تنظیمات پنل سرویس رایانش آشنا نشده‌اید و یک تابع در آن جا نساخته‌اید، به تنظیمات پنل رایانش مراجعه کنید.

تابع هندلر (HANDLER FUNCTION)

هنگامی که یک تابع در سرویس رایانش بکتوری تعریف می کنید، یک هندلر که در واقع تابعی در کد شماست که بکتوری فراخوانی را از آن اجرا آغاز می کند، تعریف می کنید. وقتی می خواهید در Node.js یک تابع هندلر ایجاد کنید، از سینتکس زیر پیروی کنید.

exports.myHandler = function(requestBody, context) {
   ...
}


در مورد این سینتکس به نکات زیر توجه کنید:

اطلاعات زمان اجرا (Context Object)

به عنوان مثال، کد نمونه ای که در آن از همه ی متدهای context استفاده شده است، در زیر آمده است.

exports.handler = function(requestBody, context) {
    var securityContext = context.getSecurityContext();
    context.log('received event:', requestBody);
    context.log('value1 =', requestBody.key1);
    context.log('value2 =', requestBody.key2);
    context.log('remaining time =', context.getRemainingTimeInMillis());
    context.log('request headers =', context.getRequestHeaders());
    context.log('userId =', securityContext.userId);
    context.log('userName =', securityContext.userName);
    context.log('keyType =', context.keyType);
    context.log('requestId =', context.requestId);
    context.succeed(requestBody.key1); // Echo back the first key value (with 200 status code)
    context.fail(requestBody.key1); // Echo back the first key value (with 420 status code)
};


در ذیل به بررسی تک تک متد های context می پردازیم:

در زیر نمونه دیگری از نحوه استفاده صحیح از متد های context آمده است.

var Backtory = require("backtory-sdk");

exports.handler = function(requestBody, context) {
    context.log("request started");
    var userId = context.getSecurityContext().userId;
    var Book = Backtory.Object.extend("Book");
    var query = new Backtory.Query(Book);
    query.set("userId", userId);
    query.find({
        success: function(list) {
            context.succeed(list);
        },
        error: function(error) {
            context.fail(error);
        }
    });
};


الگوی مناسب استفاده (Best-Practices)

در ذیل، توصیه هایی در مورد نحوه استفاده از سرویس رایانش آمده است:

مثالی از نحوه نامناسب فراخوانی دستور find در SDK:

var Backtory = require("backtory-sdk");

exports.handler = function(requestBody, context) {
    var Book = Backtory.Object.extend("Book");
    var query = new Backtory.Query(Book);
    query.find({
        success: function(list) {
            context.succeed(list);
        }
    });
};


در مثال بالا، اگر به هر دلیلی مثلا خطا در اتصال درخواست مربوط به find با مشکل روبرو شود، کالبک مربوط به error صدا زده می شود که شما مشخص نکرده اید. خوب مشکل این جاست که شما فقط در حالت success خروجی درخواست را از طریق context.succeed مشخص کرده اید.

مثالی از نحوه درست فراخوانی:

var Backtory = require("backtory-sdk");

exports.handler = function(requestBody, context) {
    var userId = context.getSecurityContext().userId;
    var Book = Backtory.Object.extend("Book");
    var query = new Backtory.Query(Book);
    query.find({
        success: function(list) {
            context.succeed(list);
        },
        error: function(error) {
            context.fail(error);
        }
    });
};


در این حالت اگر به هر دلیلی درخواست find به سرور با مشکل روبرو شود، کالبک مربوط به error صدا می شود و بلافاصله پاسخ از طریق context.fail بر گردانده می شود. در نتیجه درخواست دیگر timeout نمی شود.


گام بعدی