がりらぼ

WindowsRuntimeの応援ブログ

WindowsAzureMobileServiceカスタムAPIを使ってみる

天からのお声があったのでアルパカ牧場をWebAPI化しつつ、前から気になっていた

名称未設定

をなんとかするために、WindowsAzureモバイルサービスカスタムAPIとやらを手探りでやっていきます。

といってもモバイルサービス自体、最近始まったサービスな上にカスタムAPIとなると、ほとんど誰もやってなかったので

こことか

こことか

ここらへん

にしか情報がないです。

AzureカスタムAPIは、基本的にNode.jsと同じような感じでJavascriptでサーバースクリプトを記述します。

なので、APIとしては、

①特定のURLにアクセスがくる

JavaScriptの関数が呼び出される

③レスポンスを返す

という形になるので、②のJavaScriptの関数を変更してやる必要があります。

さきほどの画像のAPIのタブを開いてみると、

スクリーンショット 2013-09-13 22.51.26

カスタムAPIを作成というボタン

クリックして、API名と、今回はGetの部分を使うのでGetをすべてのユーザーがアクセスできるようにしておきましょう。

スクリーンショット 2013-09-13 22.53.14

このようにJavaScriptっぽいpostとgetの関数があります。

今回はGetだけを仕様するので下の関数を使います。

さらに、

アルパカ牧場のSQLデータベースから取得→APIとしてresponseから返す

という形にしたいとおもいます。

まずexports.get=function(request,response)の中でデータベースのテーブルに接続します。getTable関数内に同一モバイルサービス内に構築したデータベースのテーブル名を記述します。

[js]

var table=request.service.tables.getTable("OnlineData");

[/js]

次にテーブルから呼び出します

[js]

table.read({success:function(results){

}});

[/js]

この記述でresults引数の中にレコードがたくさん入ってます。

そしてそれをforeachで解析

[js]

results.forEach(function(item){

//item引数はレコード「.」で列にアクセス

var str=item.Name;

} );

[/js]

最後に、レスポンスを返す

[js]

response.send(str);

[/js]

大まかな流れはこのようになっています。

とりあえず僕は、SQL内のものをJSONとして返すコードを書いたので参考までに

[js]

exports.get = function(request, response) {

var table=request.service.tables.getTable("OnlineData");

table.read({success:function(results){

var str="[";

results.forEach(function(item){

str+='{"name"'+":"+'"'+item.Name+'"'+","+'"value":'+item.Level+"},";

// response.send(item.Level.toString());

// response.send(request.query.toString());

} );

str=str.slice(0, -1);

str+="]";

response.send(str);

}});

};

[/js]

結果はこんな感じになります。

スクリーンショット 2013-09-13 23.02.47[アルパカ牧場API]

構築したAPIにアクセスするには

http://[サービス名.azure-mobile.net]/api/[API名]

でアクセス出来ます。

個人的に、JavaScriptは全然わかんないんで(デバッグしにくいし)Node.jsとか詳しい人いればもっといい感じにAPI作れると思います。

ちなみにのむら氏とあじょぶじん氏がアルパカ牧場APIをつかっていろいろ作ってくれました!!

アルパカ牧場ついったー via のむら氏

アルパカビューアーfor Android あじょぶじん氏

2013-09-13 12.49.07

みんなもこのアルパカ牧場APIつかって夏休みの工作してみよう!!

https://alpacabokujodata.azure-mobile.net/api/alpacaapi