JSON-RPC

JSON-RPC は、エンコード（符号化）にJSONを採用した遠隔手続き呼出し (RPC) プロトコルの一種である。 非常にシンプルなプロトコルであり、少数のデータ型やコマンドのみが定義されている。JSON-RPCでは、通知（データをサーバに送信するもののレスポンスを必要としない）と、順序の保証されない複数呼び出しが可能である。

類似のプロトコルとしてはエンコードにXMLを用いるXML-RPCが存在する。

歴史

使い方 
JSON-RPCはこのプロトコルを実装するサーバに送信されることで用いられる。クライアントは一般的にはリモートシステムのメソッドを呼び出すことを意図したソフトウェアとなる。複数の入力パラメータを配列やオブジェクトとしてリモートメソッドに送信することが出来るが、またリモートメソッドも複数の出力データを返すことができる（この動作はバージョンにより異なる）。

全ての転送データはシリアライズされたJSONオブジェクトとしてあらわされる。リクエストはリモートシステムが提供する特定のメソッドを呼び出す。リクエストには以下の3つの重要なプロパティを含む必要がある。
 method - 実行するメソッド名の文字列。
 params - メソッドに渡されるパラメータのオブジェクトまたは配列。
 id - リクエストに対応するレスポンスを識別するための文字列または数値。

リクエストを受け取った側は、受け取った全てのリクエストに対して正しいレスポンスを返さなければならない。レスポンスは正常/エラーに応じて以下のプロパティを含む必要がある。
 result - 正常に実行された場合、メソッドを実行した結果。
 error - エラーが発生した場合、その内容を示すオブジェクト。
 id - リクエストで渡されたid。

この他に、レスポンスを必要としない通知のための仕組みが導入されている。レスポンスを返さない場合idは必要ないため、通知のリクエストはidを取り除いたリクエストの形式になっている。通知の場合 id を送らない（バージョン2.0）または null にする（バージョン1.0）べきである。

例 
以下のサンプルでは、サーバへのリクエストを --> で、サーバからのレスポンスを <-- で示す（ただしレスポンスはJSON-RPCのバージョンによっては必須ではない）。

バージョン2.0 
リクエストとレスポンス
--> {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 3}
<-- {"jsonrpc": "2.0", "result": 19, "id": 3}
通知（リクエストのみ）
--> {"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}

バージョン1.1（ワーキングドラフト） 
リクエストとレスポンス
--> {"version": "1.1", "method": "confirmFruitPurchase", "params": [["apple", "orange", "mangoes"], 1.123], "id": "194521489"}
<-- {"version": "1.1", "result": "done", "error": null, "id": "194521489"}

バージョン1.0 
リクエストとレスポンス
--> {"method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
<-- {"result": "Hello JSON-RPC", "error": null, "id": 1}

脚注

関連項目 
 遠隔手続き呼出し (RPC)
 XML-RPC
 SOAP (プロトコル)
  - SOAPとJSON-RPCのハイブリッド

外部リンク 
 JSON-RPC 

アプリケーション層プロトコル
RPC
遠隔手続き呼出し