有沒有一種方法可以通過內部url在同一移動服務上的表攔截器腳本中調用自定義api腳本?Azure移動服務服務到服務通信
還是你總是要使用公共網址(https://.azure-mobile.net)。在這種情況下,與X-ZUMO-MASTER標題一起,因爲它是服務通信的服務。自定義API只能從該腳本中調用,而不能由外部應用程序或經過身份驗證的用戶調用。我想防止主密鑰甚至通過加密通道離開服務器。
有沒有一種方法可以通過內部url在同一移動服務上的表攔截器腳本中調用自定義api腳本?Azure移動服務服務到服務通信
還是你總是要使用公共網址(https://.azure-mobile.net)。在這種情況下,與X-ZUMO-MASTER標題一起,因爲它是服務通信的服務。自定義API只能從該腳本中調用,而不能由外部應用程序或經過身份驗證的用戶調用。我想防止主密鑰甚至通過加密通道離開服務器。
如果您位於不同的服務中,那麼您需要使用公共URL,並將您想要調用的API標記爲「Admin」訪問,如您所述。
如果您想從同一服務中的表腳本調用定製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操作,它只從請求需要一個「體」參數具有三個成員(X,Y, 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);
}
}
});
}