見出し画像

【完全保存版】JSON-RPCとは

1 JSON-RPC とは

JSON-RPCは、リモートプロシージャコール(RPC)の一種で、JSONを使用してクライアントとサーバー間でメッセージをやり取りするプロトコルです。

RPC(https://medium.com/@rathnaweeraatheesh72/basic-rpc-implemented-system-in-java-8a0f359129a0)

シンプルで軽量なプロトコルであり、さまざまなプログラミング言語やプラットフォームで利用されています。

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形式で返され、それを表示しています。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊