Что такое JSON-RPC (JRPC)?

«Что такое JSON-RPC (JRPC)?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JSON-RPC (JSON Remote Procedure Call) — это легковесный протокол удаленного вызова процедур (RPC), использующий JSON (RFC 7159) в качестве формата данных. Он позволяет клиенту вызывать методы на сервере, передавая структурированные параметры, и получать структурированный ответ.

Основные характеристики:

  • Простота: Минимальный набор правил и заголовков.
  • Транспортная независимость: Может работать поверх HTTP, WebSockets, TCP или даже через файлы.
  • Поддержка уведомлений (запрос без id, на который не ожидается ответ) и пакетных вызовов (массив запросов в одном сообщении).

Структура запроса и ответа (версия 2.0):

// ЗАПРОС от клиента
{
  "jsonrpc": "2.0",
  "method": "calculateSum",
  "params": [10, 20],
  "id": 123
}

// УСПЕШНЫЙ ОТВЕТ от сервера
{
  "jsonrpc": "2.0",
  "result": 30,
  "id": 123
}

// ОТВЕТ С ОШИБКОЙ
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 123
}

Использование в Java-экосистеме: Для реализации JSON-RPC сервера или клиента можно использовать библиотеки:

  • jsonrpc4j — популярная легковесная библиотека.
  • Интеграция с Spring Boot через модули spring-boot-starter-jsonrpc или создание REST-контроллеров, обрабатывающих JSON-RPC сообщения.
  • GraalVM Truffle включает реализацию JSON-RPC для отладки.

Типичный сценарий: Микросервисная архитектура, где требуется простой и эффективный протокол для межсервисного взаимодействия, более структурированный, чем plain REST, но менее тяжелый, чем gRPC или SOAP.