ゾウさんが好きです。でもjsonengineのほうがもーっと好きです

さる案件で appengine を使った restful なサーバが必要になりました。django をメインの環境に採用して以降、python を使い続けてきたことも手伝って何の疑問も無く webapp を使い始めたのですが、いかんせんテスト環境が悪杉です。


まず、公式に記述が一切無いこと。百歩譲って有志の方が公開してくださっている情報で良しとしても、ローカルとプロダクションでの挙動が違う時もあって、ちょっと面喰らいました。仮に datastore をローカルで完全再現できない(プログラム的に。あるいはライセンス的に敢えて)のであれば、双方で同一テストを実行できる環境くらいは、あらかじめ用意しておいてくれても罰は当たらんと思うのです。

AppEngine SDK標準テスト用環境の問題 - tagomorisのメモ置き場


そんな折り、webapp での良質なテスト環境を求めてネットを彷徨っていたところ ktrwjr のことを知りました。

ところで出来上がったあと公開用の準備をやってたら、GAE/J側ではslim3がkotoriを組み込んだという話が。おおお。 テストケースのベースクラス GAETestBase を作った - tagomorisのメモ置き場

python のテスト環境の紹介で java用が既知となる、というのも何やらおかしなものですが、お試してみると、正に望んでいたそのものでありませんか!

java ならば、公式に記述もあります。個人的には python への特段のこだわりも無いので、「昔取った杵柄」よろしく、さっさと java への移行を決めました。


さて、問題はどの framework を採用するか、です。datastore については slim3 で文句無し、といったところでしょうか。ただ、restful については少し支援機能が欲しいところではあります。java では目移りするくらい沢山あるのですが、GAE で使いものになる、という括りでは相当絞られてくるのでしょう。

以上のサイトを参考に下記をピックアップしてお試ししてみました。

  • Jersey
    • そのままでは GAE で稼働しないが、回避方法有り。
    • ドキュメントにはテスト環境への言及もあり好感。
    • 全体的にシンプルで理解しやすい構成に好印象。
    • slim3 の SpinUpTime を見てしまうと遅い部類。(難点)
  • Restlet
    • GAE と GWT に公式対応。
    • リソースを意識したコード構成に好印象。
    • SpinUpTime も実装状況を考えれば頑張っている方だと思う。
    • テスト環境がまったく用意されていない。google先生でも確定的な情報を取得できない。(難点)
  • jsonengine
    • framework と言うより GAE アプリケーションという区分。
    • slim3 で記述されているので、上記二つで問題となったテストと SpinUpTime は文句の余地が無い。
    • 保存形式は JSON のみ。希望の挙動(対XSSなど)に変更したい場合はソースを読んで修正する必要有り。(難点)

個人的には Jersey か Restlet が一押しレベルなのですが、やはりテスト環境の有無や SpinUpTime の遅さは最終的にサービスを利用するユーザ視点ではマイナスでしょう。ある程度、必要とされる挙動へのコード修正にも目処が付いたので、今回は jsonengine を採用することにしました。


P.S.
要望として issues にも投稿してみたいとも思うのですが、英語というのがいささかハードルが高いです。っていうか、そんなこと言ってちゃイケませんね。英語をもっと勉強せねば!