CodeZine(コードジン)

特集ページ一覧

サーバー側コーディング不要のGoogle App Engine開発環境「jsonengine」

「jsonengine」の概要と特徴

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/01/20 14:00

目次

JSONのPOST送信で簡単保存

 では、jsonengineはどのような仕組みでサーバー側のコーディングなしでアプリケーション機能を実現しているのでしょうか。その謎を解くために、まずは以下のサンプルアプリにアクセスしてみてください。

jsonengineのBBSサンプルアプリ
jsonengineのBBSサンプルアプリ

 このアプリケーションは、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に備わる管理画面のセキュリティ設定機能です。

jsonengineのセキュリティ設定タブ
jsonengineのセキュリティ設定タブ

 このセキュリティ設定機能を使用することで、ドキュメントタイプごとに以下の4段階のアクセス制御を実施できます。

  • public:誰でも読み書き可能
  • protected:認証ユーザーのみ読み書き可能
  • private:ドキュメント所有者のみ読み書き可能
  • admin:管理者のみ読み書き可能

 よって、例えばゲストブックのようなドキュメントタイプには、「誰でも読み込み可能」「ドキュメント所有者のみ書き込み可能」といったセキュリティ設定を行うことで、不正なデータの書き換えなどを防ぐことが可能です。ユーザー認証の手段としては、GoogleアカウントとOpenIDのいずれかを選択できます。こうしたセキュリティ機能を事前に用意していることで、単純なREST APIであっても安全なアプリケーションを構築できる仕組みです。

 以上、本稿ではjsonengineによるApp Engine開発の概要を紹介しました。ここまでの説明でお分かりいただけたように、jsonengineのメリットはその「手軽さ」です。「App Engineは興味あるけどJavaもPythonも知らない……」「フォーム入力データやログなどの情報を手っ取り早くどこかに記録しておきたい」「AndroidやiPhoneのアプリのプロトタイピングをサーバーレスでやりたい」といったニーズにぴったりのツールです。ぜひ試してみてはいかがでしょうか。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 吉川和巳(ヨシカワカズミ)

    エンタープライズ分野やJava分野を中心に、ITアーキテクトおよびテクニカルライターとして活動する。大学在学中の4年間はオブジェクト指向言語Smalltalk-80やMVCモデルを研究。日本オラクルを経て、1998年に有限会社スティルハウスを設立。ITアーキテクトとして大手外資系IT企業でのiアプリ...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5