【完全保存版】JSON-RPCとは
1 JSON-RPC とは
JSON-RPCは、リモートプロシージャコール(RPC)の一種で、JSONを使用してクライアントとサーバー間でメッセージをやり取りするプロトコルです。
シンプルで軽量なプロトコルであり、さまざまなプログラミング言語やプラットフォームで利用されています。
2 主な特徴
1 シンプルで軽量
プロトコルは非常に簡単で、必要最小限の機能だけを提供します。
2 プラットフォームに依存しない
JSON形式のメッセージを使用するため、さまざまなプラットフォームやプログラミング言語でサポートされています。
3 バージョン管理
JSON-RPCは、特定のバージョンを明示的に指定することで、異なるバージョン間の互換性を管理できます。
3 JSON-RPCの基本構造
JSON-RPCのメッセージは、リクエストとレスポンスに分かれています。
1 リクエスト
クライアントからサーバーに送信されるリクエストのフォーマットは以下の通りです。
{
"jsonrpc": "2.0",
"method": "methodName",
"params": [param1, param2, ...],
"id": 1
}
jsonrpc: 使用しているプロトコルのバージョンを示します(ここでは "2.0")。
method: 呼び出すメソッドの名前を指定します。
params: メソッドに渡すパラメータのリストです。オブジェクト形式のパラメータもサポートされています。
id: リクエストを一意に識別するためのIDです。レスポンスの対応付けに使用されます。
2 レスポンス
サーバーからクライアントに返されるレスポンスのフォーマットは以下の通りです。
{
"jsonrpc": "2.0",
"result": "resultValue",
"id": 1
}
jsonrpc: 使用しているプロトコルのバージョンを示します(ここでは "2.0")。
result: メソッドの実行結果を含みます。メソッドが成功した場合に返されます。
id: 対応するリクエストのIDです。
エラーが発生した場合のレスポンスのフォーマットは以下の通りです:
{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 1
}
jsonrpc: 使用しているプロトコルのバージョンを示します(ここでは "2.0")。
error: エラー情報を含むオブジェクトです。codeはエラーコード、messageはエラーメッセージです。
id: 対応するリクエストのIDです。
4 JSON-RPCの利用例
以下に、PythonでのJSON-RPCクライアントの簡単な例を示します。リクエストを送信し、レスポンスを受信するコードです。
import requests
import json
# JSON-RPCリクエストを送信する関数
def send_json_rpc_request(url, method, params, request_id):
headers = {'Content-Type': 'application/json'}
payload = {
"jsonrpc": "2.0",
"method": method,
"params": params,
"id": request_id
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
return response.json()
# サーバーのURL
url = "http://example.com/json-rpc"
# メソッドとパラメータ
method = "subtract"
params = [42, 23]
request_id = 1
# リクエストを送信してレスポンスを取得
response = send_json_rpc_request(url, method, params, request_id)
# レスポンスを表示
print(json.dumps(response, indent=4))
この例では、指定したURLのサーバーに対してsubtractメソッドを呼び出し、パラメータ[42, 23]を送信しています。
サーバーからのレスポンスがJSON形式で返され、それを表示しています。