ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2REST

S2RESTで呼び出されるのは、Serviceクラスです。serviceパッケージに入っていれば、呼び出せるようにしようかなと思っています。Serviceクラスの名前は、リソース名 + Serviceになります。クライアントは、/リソース名/で呼び出します。
HTTPのメソッドとServiceクラスのメソッドの関係は次のようになります。

HTTPService
GETget
POSTcreate
PUTupdate
DELETEdelete
ただし、putとdeleteは、POSTを使ってformパラメータにhiddenで_methodを追加し、put, deleteを渡すこともできるようにする予定。

  • GET /リソース名/
  • GET /リソース名/idの値

は、まぁいいかなと思いますが、条件付検索が難しいですね。
GET /リソース名/?パラメータ1=値1&パラメータ2=値2だったら、パラメータ1,パラメータ2をプロパティに持つDTOマッピングする感じかな。XxxService#get(XxxServiceGetDto dto)
同じに見えるリソースでも表現が異なる場合があります。例えば、従業員のデータを返す場合と、従業員+部署のデータを返すようなケースです。このような場合は、
GET /emp/withDept/
をEmpService#getWithDept()にマッピングすればよいのかなと考えています。
HTMLのクライアントとサービスを区別するためにGET /service/リソース名/にしたほうが良いかも。なぜなら、http://.../ユースケース名/xxx.htmlなどと区別するため。
戻り値の形式は、Acceptヘッダによって切り替える予定ですが、デフォルトは、Atomになると思います。