tmytのらくがき

個人の日記レベルです

Azure Mobile ServiceでRESTfulなAPIを

Azure Mobile Servicesでは、カスタムAPIを定義することで好き勝手APIが作れます。幸せですね。 しかも、Javascriptが使えます。うれしいですね。

ちなみにこれ、中身がExpress.jsなのでURLのルーティングができます。 URLのルーティングというのはたとえば、次のような感じ。

/1.1/statuses/show/100.xml
=> show.xml?id=100 として解釈

カスタムAPIを作成した直後だと、こんな次のようなスクリプトがデフォルトで書いてあります。

exports.post = function(request, response) {
    response.send(statusCodes.OK, {message: 'Hello, World!'});
};

exports.get = function(request, response) {
    response.send(statusCodes.OK, {message: 'Hello, World!'});
};

これにアクセスすると、次の結果になります。

method url response
GET /api/name 200 OK
GET /api/name/ 200 OK
POST /api/name 200 OK
GET /api/name/value 404 Not found
GET /api/name/?key=value 200 OK

4個目の例をURLのルーティングを設定して200 OKになるようにしてみましょう。 具体的にはこんな感じ。

exports.register = function(api) {
    api.get("/:id", get_id);
};

exports.post = function(request, response) {
    response.send(statusCodes.OK, {message: 'Hello, World!'});
};

exports.get = function(request, response) {
    response.send(statusCodes.OK, {message: 'Hello, World!'});
};

function get_id(request, response) {
    response.send(statusCodes.OK, {message: 'Hello, World!', id: request.params.id});
};

exports.registerに関数を設定してあげるとURLのルーティングができます。 Express.jsなのでまったく同じですね。 Azure Mobile Services側でおそらく次のようなコードが実行されているようです。

var express = require('express');
var app = new express();
var api = {
   get: function(uri, handler){
     app.get('/\/api\/api_name\/'+uri+'/', handler);
   }
};
// ...
var api_name = require('api_name.js');
api_name.register(api);