JSON-RPC

JSON-RPC 2.0 — простой RPC-протокол на JSON. Один эндпоинт, вызов методов по имени. Проще REST, старше GraphQL. Популярен в криптоблокчейне (Ethereum, Bitcoin) и внутренних API.

Запрос

{
  "jsonrpc": "2.0",
  "method": "user.get",
  "params": {"id": 42},
  "id": 1
}

Ответ (успех)

{
  "jsonrpc": "2.0",
  "result": {"id": 42, "name": "Vasya"},
  "id": 1
}

Ответ (ошибка)

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}

Standard error codes

CodeЧто
-32700Parse error (не JSON)
-32600Invalid Request
-32601Method not found
-32602Invalid params
-32603Internal error
-32000 .. -32099server-defined

Batch

# запрос
[
  {"jsonrpc":"2.0","method":"a","id":1},
  {"jsonrpc":"2.0","method":"b","id":2}
]

# ответ
[
  {"jsonrpc":"2.0","result":"...","id":1},
  {"jsonrpc":"2.0","result":"...","id":2}
]

Notifications

Запрос без id — ответа не будет (fire-and-forget). Полезно для событий.

Транспорт

Не привязан к HTTP! Работает поверх:

Ethereum JSON-RPC

curl -X POST https://mainnet.infura.io/v3/KEY \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

# → {"jsonrpc":"2.0","result":"0x1a3b4c5","id":1}

vs REST / GraphQL

JSON-RPCRESTGraphQL
СтильRPCресурсныйquery
URLодинмногоодин
HTTP-кодывсегда 200значимыобычно 200
Простотамаксимумсреднесложно

См. также

← на главную