Azure Mobile App のあれこれ
- Visual Studio 2013 を使用した Azure Mobile App のアプリケーション開発
- Azure Mobile App で別の Server Script を参照 (Refer) する
- Azure Mobile App の Client-directed Login
こんにちは。
アイデンティティ・シリーズの最終回である「Build Insider : Windows Azure の認証におけるその他サービス ~ Windows Azureモバイル・サービス、多要素認証」が公開されました。
皆さん、このシリーズがあったこと忘れてましたよね。私も、この記事を以前書いていたことを、つい忘れてました。私のレビューが超遅れたこともあり、執筆してから数か月後の公開となり、もう古い情報になってしまいました。
技術情報は鮮度が命なんですが、申し訳ありません ! (執筆原稿に「リリースしたばかりの・・・」などの記述もあったのですが、昨日全部削除しました。一色編集長、いつもいつも、すみません!)
さて、昨日読み直して思い出しましたが、紙面上の関係でいくつか解説を省略してますので、補足したいと思います。
まず、Azure Mobile App (旧 Azure Mobile Service) のサーバー・スクリプトについてです。
記事ではサーバー・スクリプトを使用すると、さまざまな応用が可能であることを解説しています。これらの「技」については、このブログでは解説しませんが、利用する上での大事な手法として、Script Source の参照 (refer) も可能です。複雑な処理、共通の処理などは、モジュールにわけて再利用できますので、実際の開発においては、是非活用してください。
手順は、以下の通りです。(結論を書くと、ソース管理の機能を使用します。もちろん、この機能を使って、バックアップなど、ソース管理自体に応用できます。)
まず準備として、Azure Mobile App のダッシュボードを表示して、下図の [ソース管理の設定] (Set up source control) をクリックします。クリックをおこない、認証設定などの必要な構成をおこなうと、Git を使ったソース管理が可能になります。
完了後、上部の [構成] をクリックすると、Git の Url を取得できます。
開発をおこなうローカル環境に Git (msysgit など) をインストールして、Git Bash などを使って pull、push など (ソースのダウンロードや更新など) をおこえます。
例えば、下図は、Azure Mobile App から、サーバー・スクリプトを含む関連するソース一式をすべて取得します。(下記の https://tsmatsuz-mob01.scm.azure-mobile.net/tsmatsuz-mob01.git は、私の環境の Git Url です。)
一度、サーバー・スクリプト (テーブルのトリガー・スクリプト) の編集をおこなっていると、servicetable サブフォルダーに編集したサーバー・スクリプト (トリガー・スクリプト) がダウンロードされているのが確認できます。例えば、TestTbl の insert スクリプトを編集した場合には、「testtbl.insert.js」という名前のファイルがダウンロードされているはずです。
いま、「Build Insider : Windows Azure の認証におけるその他サービス ~ Windows Azureモバイル・サービス、多要素認証」で紹介したように、以下のようなスクリプトが、この testtbl.insert.js に記述されていると仮定します。ここでは、UserTbl の内容を見て、利用者 (ユーザー) がここに登録されている場合のみデータの挿入を許可しています。
function insert(item, user, request) { var usertbl = tables.getTable('UserTbl'); usertbl.where({ userid : user.userId }).read({ success: function(results) { if (results.length === 0) { request.respond(401, 'User is not registered'); } else { request.execute(); } }, error: function(err) { request.respond(401, 'User validation failed'); } });}
では、このユーザー確認の処理を、共通の function として Script ファイルに分離し、その Script Source を参照 (refer) してみましょう。
まず、serviceshared に users.js という名前のテキスト ファイルを新規作成します。このファイルに、下記の通り function を作成しましょう。
exports.usercheck = function( user, tableset, success_callback, error_callback) { console.log('function called'); // debug var usertbl = tableset.getTable('UserTbl'); usertbl.where({ userid : user }).read({ success: function(results) { if (results.length === 0) { error_callback({ status: 401, message: 'User is not registered' }); } else { success_callback(); } }, error: function(err) { error_callback({ status: 401, message: 'User validation failed' }); } });};
上記の usercheck 関数は、IO 処理のため非同期 (asynchronous) の処理になっていますが、もちろん、下記のような return (返り値) を持つ単純な同期関数も実装できます。(というか、このほうが一般的ですね。)
補足 : JavaScript の IO 処理は、必ず非同期がベースとなります。C# のように同期で実装することはできず、むしろ、制約により、最適なプログラミングを強制します。(サーバー・サイドにおける非同期プログラミングの効果と意義については、「ASP.NET で非同期 (Async) がなぜ重要なのか」を参照してください。)
exports.addtest = function(a, b) { return a + b; };
さて、上記の関数 (usercheck) を使用するサーバー・スクリプト側は、以下の通り記述します。今回は、servicetabletesttbl.insert.js から使用するサンプルです。
このプログラムのポイントは、require 関数を使用したスクリプトの動的参照です。
function insert(item, user, request) { var userModule = require('../shared/users.js'); userModule.usercheck(user.userId, tables, function() { request.execute(); }, function(err) { request.respond(err.status, err.message); });}
以上で完了です。
あとは、git bash を使って、下記の通り、変更されたソースコードを Azure Mobile App に push します。
git add .git commit -m "function test"git push origin master
今回は、カスタムな function を作成して再利用しましたが、「Microsoft Azure : Store server scripts in source control」にも記載されている通り、require を使用して Node.js modules (Node.js モジュール) をインストールして参照することも可能です。(ただし、http や https を使用した外部スクリプトの参照はできないようです。)
便利なサーバー・スクリプトですが、あとは、デバッグが簡単になると良いですね …
※ 変更履歴
2015/03/26 Azure Mobile Service から Azure Mobile App に名称変更
Categories: Uncategorized
2 replies»