JSONRPCとは
JSONを用いてRPCを実現するプロトコルです。詳しくは以下のWebサイトにまとまっています。
http://www.jsonrpc.org/
この記事の概要
この記事ではJSONRPCのSpecにまとまっているBatchとNotificationという特徴的なリクエスト方法をまとめます。間違っている箇所などあれば指摘してください。
Batch
JSONRPCにはBatchというリクエスト仕様が定義されています。
http://www.jsonrpc.org/specification#batch
簡単に言うとJSONを配列で複数つなげてリクエストすると、レスポンスもそれにあわせてそれぞれ配列で返ってくる、という仕様です。一度の通信で複数回メソッド実行を行うことで通信コストを下げることなどが可能です。
Batchサンプル
Request
リクエストのJSONを配列でつなげて一度に投げてみます。
[{
"id" : 0, //結果を判別するID
"jsonrpc" : "2.0",
"method" : "batchRequest",
"params" : {
....
}
},
{
"id" : 1, //結果を判別するID
"jsonrpc" : "2.0",
"method" : "batchRequest",
"params" : {
....
}
}]
Response
すると、以下のようにレスポンスも指定したIDごとに配列で返ってきます。
[
{
"jsonrpc":"2.0",
"id":"0", //リクエストで指定したIDと紐づいている
"result":{"status":"OK"}
},
{
"jsonrpc":"2.0",
"id":"1", //リクエストで指定したIDと紐づいている
"result":{"status":"OK"}
},
]
Notification
こちらも同様ですが、Notificationというリクエスト仕様が定義されています。
http://www.jsonrpc.org/specification#notification
クライアントからサーバー側に情報を通知するだけ、みたいな用途のときに用います。情報送るだけですので、レスポンスを受けてクライアントで処理を行わないでよいような場合に効率的かもしれません。
Notificationサンプル
Request
以下のように「id : 」の要素を省略すると自動的にNotificationリクエスト形式となります。
また、NotificationかつBatchリクエストということも可能です。
[{
"jsonrpc" : "2.0",
"method" : "batchAndNotification",
"params" : {
....
}
},
{
"jsonrpc" : "2.0",
"method" : "batchAndNotification",
"params" : {
....
}
}]
Response
パラメータに問題が無く、正常にリモートのメソッドを実行できた場合はすぐにHTTPレスポンスが204 Statusで返却されます。この際、Bodyには何も入ってこないのでサーバー側でのエラーなどをキャッチすることは出来ません。この辺りが、Notificationの特徴です。
詳細
その他エラーの捕まえ方など、詳細に理解する為にjsonrpcの仕様書をきちんと読むことをお勧めします。