LoginSignup
53

More than 5 years have passed since last update.

JSONRPC - Batch/Notificationについて

Posted at

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の仕様書をきちんと読むことをお勧めします。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53