umjammer です、 ソーシャルアプリの作り方の第二回になります。 第一回目で Mixi アプリを作成しましたが、それをホスティングする必要があります。また外部 API としてハイスコア管理をしたいので、それを行う Web App を作成してホスティングする場所が必要になります。 今回はある程度の規模までならタダで、しかも簡単にスケールしてくれる Google App Engine で Mixi アプリをホスティングすることにします。
GAE Logo


まず Mixi アプリですが ガジェット XML やその他 html, javascript は普通に配置します。
OpenSocial, GAE


次に外部 API のハイスコア管理を実装するために Web App を実装します。

足回り

GAE はどこからでもアクセスできてしまいます。そのため Mixi アプリ以外からのリクエストを遮断するために OAuth を使用します。 OAuth は OpenSocial でも使用されている API 認可方式です。Mixi API は OpenSocial ベースなので同じものを採用します。 サーブレットフィルタとして実装されているソフトウェアが存在するので利用させていただきます。 フィルタ実装ですと Web App は認可を気にせずコーディングできるので大変便利です。Mixi から取得した公開鍵、アプリID, ガジェットXMLのURL を設定して、web.xml にフィルタとして登録します。


Mixi 公開鍵の URL

Web App 実装

外部 API は簡単に作成するために REST API のフレームワークを使用します。JSR-311 のリファレンス実装である Jersey を採用してみました。アノテーションと DI が使えるのでかなり楽にプログラムが組めます。HTML のテンプレート等を簡単に扱えるレンダラがあれば言うこと無しなのですが。 http://code.google.com/p/umjammer/source/browse/trunk/vavi-apps-gae03/src/main/java/vavi/apps/umjammer03/lr/LodeRunnerResource.java Data Store に関しても楽をしたかったので SpringFramework の AOP Transaction を使用した JPA で書いてみました。私トランザクションの例外処理を書くのが大嫌いなんです。 http://code.google.com/p/umjammer/source/browse/trunk/vavi-apps-gae03/src/main/java/vavi/apps/umjammer03/lr/MixiFeint.java http://code.google.com/p/umjammer/source/browse/trunk/vavi-apps-gae03/src/main/java/vavi/apps/umjammer03/lr/MixiFeintService.java あとはチューニングとして Cache API なども使用します。

まとめ

フレームワークを使いすぎました。Web App 自体は簡単に作成することができましたが、実際に動かしてみると spin-up にものすごく時間がかかります。 GAE/J はこのあたりを気にしないといけないのが辛いところですね。 ともあれ、SpringFramework や JSR-311 などは何も気にせずに GAE/J に載せることができたので、アプリケーションを簡単に GAE でホスティングすることができました。 次回はこのシリーズの目玉になります。お楽しみに。