hagino3000's blog

平成アーカイブス (更新停止)

RESTとJSON-RPC

JSON-RPCいいよねって話が一昨日の発表後に出たのでちょっと考えてみた。

説明不要だろうけど簡単にそれぞれの特徴を。ここではブラウザとサーバー間でのやりとりを前提とする。

REST

リソース毎にuriを切っておいて、HTTPのGET, POST, PUT, DELETEメソッドで操作を行なう。
例えば /user/1 というuriに対してGETしたらidが1のユーザ情報が得られる様にしておく。GET処理はべき等にする、などのルールもあるけど難しくない。
調べればいくらでも情報はある。

JSON-RPC

RPCはRemote Procedure Callの略。/rpc みたいなuriを一個用意する。リクエストボディをJSON文字列にして起動処理やパラメータをHTTP POSTメソッドで送信する。レスポンスもJSON文字列にする。

// リクエストボディの例
{
"method" : "getUser",
"params" : [{
"id" : "1"
}]
}

仕様を決めようみたいな動きはあったけど決まってない。

現状、仕様はあって無いような物なので、JSONでRPCやってればそれはJSON-RPCなのでしょう。

JSON-RPCのいい所

WebSocketで使える

というかWebSocket使ってると、REST何それ?、という感じに。

XMLより楽

XML = だるい

ややこしい事がやれる

複数レコード一括更新処理なんかはRESTで実装しにくい。JSON-RPCなら対象レコードのidと属性をJSONに全部入れてしまえばOK。
例としてExtJSに含まれるExt Direct*1というモジュールを使うと、一定時間内に発生したリクエストを一つのリクエストにまとめてサーバーに送信するという事もやってくれる。

なので

難しい事やりたいならRPCだし、そうでないなら好きな方を使えばいいんじゃないかな。
jQueryプラグインもあるし。
https://github.com/hagino3000/jquery-jsonrpc2.0

*1:Ext DirectはJSONXMLの両方いける