JSONのPOST送信で簡単保存
では、jsonengineはどのような仕組みでサーバー側のコーディングなしでアプリケーション機能を実現しているのでしょうか。その謎を解くために、まずは以下のサンプルアプリにアクセスしてみてください。
このアプリケーションは、jsonengineのトップページに掲載されているサンプルです。ご覧のとおり、テキストフィールドにメッセージを入力して「Post」をクリックするとその内容が画面下に表示される、ごく簡単なゲストブック機能を提供します。このアプリはJavaScript(jQuery)からサーバー側のjsonengineにアクセスすることで実装されています。まずは、Postボタンをクリックした際に実行されるjQueryコードを見てみましょう。
// post a message
$.post("/_je/messages", { messageBody: msg }, function (result){
query(null);
}, "text");
ご覧のとおり、jQueryのpost関数を使用して、「/_je/messages」というURIに対して「messageBody=<メッセージ>」というパラメータとともにHTTP POSTリクエストを送信しているだけです。このPOSTリクエストを受け付けたjsonengineは、「messages」というドキュメントタイプ(データベースのテーブル名のようなもの)で「{ messageBody: "<メッセージ>" }」というJSONドキュメントをApp Engineのデータストアに保存します。
このようにjsonengineでは、どのようなJSONドキュメントでも、POSTリクエストを送るだけで簡単に保存できます。ここで注目していただきたいのは、jsonengine側での事前のコーディングやデータベーススキーマ設定などが「一切不要」であるという点です。jsonengineのマニュアルに従ってjsonengineをApp Engine上にアップロードしておく(およそ15分~30分で完了)だけで、このサンプルアプリのようなクライアントの記述にすぐにとりかかれます。
GETでJSON一覧を取得
一方、メッセージ一覧をApp Engineから取得して画面表示するjQueryコード部分を見てみましょう。
$.get("/_je/messages", { sort: "_createdAt.desc", limit: 100}, function (result) {
$("#messages").empty(); for (i = 0; i < result.length; i++) { var msg = $("<div/>").text(result[i].messageBody); $("#messages").append(msg); }
});
ここでは、先ほどのPOST時に使用したURI「/_je/messages」に対して、get関数を使用してHTTP GETリクエストを送信しています。その際、「sort=_createdAt.desc」および「limit=100」というパラメータを付加しています。それらはそれぞれ、「JSONドキュメントの作成日時の降順でソート」「最大100件のみ返す」という意味です。
このGETリクエストに対して、jsonengineは以下のようなJSONドキュメントの配列を返します。
[
{"messageBody" : "<メッセージ>",
"_docId" : "DNmmp9SrGsbgKZ7J",
"_updatedAt" : 1294556982388,
"_createdAt" : 1294556982388},
…<中略>
]
このように、ドキュメントタイプ「messages」で保存されたJSONドキュメントが配列として返されます。個々のドキュメントには、ドキュメントのIDを表す「_docId」や、作成日時と更新日時を表す「_createdAt」「_updatedAt」が自動的に付加されているのが分かります。GETリクエストのパラメータで指定したとおり、ここで得られるJSONドキュメントの配列は、作成日時の降順でソートされ、最大100件に制限されます。
ここまで見てきたとおり、jsonengineでは、RESTベースのHTTPリクエストを介してごく簡単にJSONドキュメントの保存と検索を行えるのが最大の特徴です。繰り返しになりますが、サーバー側のコーディングやスキーマ設定はまったく必要ありません。また、どのような内容や構成のJSONドキュメントであっても、POSTメソッドでいきなり送りつけて保存でき、GETメソッドで検索が可能です。そのため、JavaScriptに限らず、HTTP通信の可能なあらゆるWebクライアントからjsonengineを利用することができます。
Googleアカウント・OpenIDによるセキュリティ保護
ここまでご覧になった読者の中には、「外部からRESTで直接データを読み書きできるのはセキュリティ的に危険ではないか?」という疑問を持つ方も多いでしょう。実は、jsonengineのもう一つの特徴は、GoogleアカウントまたはOpenIDによるセキュリティ機能があらかじめ用意されている点です。以下の画面は、jsonengineに備わる管理画面のセキュリティ設定機能です。
このセキュリティ設定機能を使用することで、ドキュメントタイプごとに以下の4段階のアクセス制御を実施できます。
- public:誰でも読み書き可能
- protected:認証ユーザーのみ読み書き可能
- private:ドキュメント所有者のみ読み書き可能
- admin:管理者のみ読み書き可能
よって、例えばゲストブックのようなドキュメントタイプには、「誰でも読み込み可能」「ドキュメント所有者のみ書き込み可能」といったセキュリティ設定を行うことで、不正なデータの書き換えなどを防ぐことが可能です。ユーザー認証の手段としては、GoogleアカウントとOpenIDのいずれかを選択できます。こうしたセキュリティ機能を事前に用意していることで、単純なREST APIであっても安全なアプリケーションを構築できる仕組みです。
以上、本稿ではjsonengineによるApp Engine開発の概要を紹介しました。ここまでの説明でお分かりいただけたように、jsonengineのメリットはその「手軽さ」です。「App Engineは興味あるけどJavaもPythonも知らない……」「フォーム入力データやログなどの情報を手っ取り早くどこかに記録しておきたい」「AndroidやiPhoneのアプリのプロトタイピングをサーバーレスでやりたい」といったニーズにぴったりのツールです。ぜひ試してみてはいかがでしょうか。


