2014-10-16 4 views
1

Есть ли способ вызвать собственный скрипт api из сценария перехватчика таблицы на той же мобильной службе через внутренний URL-адрес?Azure услуги мобильной связи для обслуживания связи

Или вы всегда должны использовать общедоступный url (https: //.azure-mobile.net). В этом случае вместе с заголовком X-ZUMO-MASTER, потому что это сервис для обслуживания связи. Пользовательский api должен вызываться только из этого сценария, а не с помощью внешних приложений или аутентифицированных пользователей. Я хочу, чтобы главный ключ оставил сервер даже по зашифрованному каналу.

ответ

1

Если вы используете разные сервисы, вам необходимо использовать общедоступный URL-адрес и пометить API, который вы хотите назвать как «доступ администратора», как вы упомянули.

Если вы хотите вызвать пользовательский API из сценария таблицы в той же службе, тогда вы можете просто «потребовать» пользовательский API и назвать его обычной JS-функцией. Обратите внимание, что хотя API принимает параметр «запрос» и «ответ», это JavaScript, поэтому все, что выглядит как запрос/ответ, будет работать (утиная печать). Например, если у меня есть этот пользовательский интерфейс API под названием «Калькулятор» определяется следующим образом:

exports.post = function(request, response) { 
    var x = request.body.x || request.param('x'); 
    var y = request.body.y || request.param('y'); 
    var op = request.body.op || request.body.operation || request.param('op'); 
    calculateAndReturn(x, y, op, response); 
}; 

exports.get = function(request, response) { 
    var x = request.param('x'); 
    var y = request.param('y'); 
    var op = request.param('op') || request.param('operator'); 
    calculateAndReturn(x, y, op); 
}; 

function calculateAndReturn(x, y, operator, response) { 
    var result = calculate(x, y, operator); 
    if (typeof result === 'undefined') { 
     response.send(400, { error: 'Invalid or missing parameters' }); 
    } else { 
     response.send(statusCodes.OK, { result : result }); 
    } 
} 

function calculate(x, y, operator) { 
    var undef = {}.a; 

    if (_isUndefined(x) || _isUndefined(y) || _isUndefined(operator)) { 
     return undef; 
    } 

    switch (operator) { 
     case '+': 
     case 'add': 
      return x + y; 
     case '-': 
     case 'sub': 
      return x - y; 
     case '*': 
     case 'mul': 
      return x * y; 
     case '/': 
     case 'div': 
      return x/y; 
    } 

    return undef; 
} 

function _isUndefined(x) { 
    return typeof x === 'undefined'; 
} 

Обратите внимание, что для операции POST, необходимо только из запроса параметра «тела» с тремя членами (х, у, op), и единственная функция в ответе, которая называется: send. Мы можем назвать это из сценария таблицы, передав ему калькулятор:

function insert(item, user, request) { 
    var calculator = require('../api/calculator'); 
    var quantity = item.quantity; 
    var unitPrice = item.unitPrice; 
    calculator.post({ body: { x: quantity, y: unitPrice, op: '*' } }, { 
     send: function(status, body) { 
      if (status === statusCodes.OK) { 
       item.totalPrice = body.result; 
       request.execute(); 
      } else { 
       request.respond(status, body); 
      } 
     } 
    }); 
} 
Смежные вопросы