ゾウさんが好きです。でも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 で使いものになる、という括りでは相当絞られてくるのでしょう。
- Will it play in App Engine - Google App Engine for Java | Google Groups
- InfoQ: RESTをサポートしているという Webフレームワークは、どの程度 RESTful か?
- jsonengine 日本語ドキュメント — jsonengine-manual-ja v0.1 documentation
以上のサイトを参考に下記をピックアップしてお試ししてみました。
- Jersey
- そのままでは GAE で稼働しないが、回避方法有り。
- ドキュメントにはテスト環境への言及もあり好感。
- 全体的にシンプルで理解しやすい構成に好印象。
- slim3 の SpinUpTime を見てしまうと遅い部類。(難点)
- Restlet
- jsonengine
個人的には Jersey か Restlet が一押しレベルなのですが、やはりテスト環境の有無や SpinUpTime の遅さは最終的にサービスを利用するユーザ視点ではマイナスでしょう。ある程度、必要とされる挙動へのコード修正にも目処が付いたので、今回は jsonengine を採用することにしました。
P.S.
要望として issues にも投稿してみたいとも思うのですが、英語というのがいささかハードルが高いです。っていうか、そんなこと言ってちゃイケませんね。英語をもっと勉強せねば!