はじめに
リッチな UI を持つ Web アプリを作るなら、クライアントは Ajax か Flash、または Silverlight を使うと思う。そうすると、表示するデータを非同期に JSON または XML で取得するために、Web API を実装することになる。
でも、リクエストパラメータを解析して処理を決めたり、結果を XML や JSON に変換したりと、Web API を一から実装するのは大変。
Google App Engine の場合
Web アプリ開発の経験は Google App Engine だけなので、GAE の話になるけど、GAE には『appengine-rest-server』というフレームワークがある。
.NET の WCF Data Services みたいなフレームワークで、これを使えば簡単に RESTFul な Web API を実装できる。
使い方はいたって簡単
rest.Dispatcher に、公開したいモデルを指定するだけ。
#!/usr/bin/env python from google.appengine.ext import db from google.appengine.ext import webapp from google.appengine.ext.webapp import util import rest # RESTful な API で公開したいモデル class Task(db.Model): name = db.StringProperty() done = db.BooleanProperty(default=False) created = db.DateTimeProperty(auto_now_add=True) class MainHandler(webapp.RequestHandler): def get(self): self.response.out.write('Hello world!') # ベースアドレス指定 rest.Dispatcher.base_url = '/rest' # 公開するモデルを登録 rest.Dispatcher.add_models({ 'tasks': Task, }) application = webapp.WSGIApplication([ ('/', MainHandler), ('/rest/.*', rest.Dispatcher) ], debug=True) # テストデータを挿入 Task.get_or_insert("test1", name="Foo") Task.get_or_insert("test2", name="Bar", done=True) Task.get_or_insert("test3", name="Hoge", done=True) Task.get_or_insert("test4", name="Fuga") def main(): util.run_wsgi_app(application) if __name__ == '__main__': main()
API を呼び出してみる
開発サーバーを起動して、http://localhost:[ポート番号]/rest/tasks/ に接続したのが下の画面。
テストデータが全部表示されている。
絞り込むことも可能。試しに、done=Falseのものだけ取得してみる。http://localhost:[ポート番号]/rest/tasks?feq_done=False に接続した画面がこちら。
ちゃんと絞り込まれている。
データを絞り込む詳しい方法は、appengine-rest-server のドキュメントを参照のこと。試していないけど、ソースを見る限り、結果を JSON でも取得できるようだ。