Какие плюсы и минусы у JSON-RPC?

«Какие плюсы и минусы у JSON-RPC?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плюсы:

  • Простота и лёгкость: Легковесный протокол на основе JSON, понятный для чтения и реализации.
  • Чёткая структура: Запросы и ответы имеют строгую структуру (jsonrpc, method, params, id, result/error), что упрощает парсинг.
  • Широкая поддержка: Реализации есть практически для всех языков программирования благодаря стандартным библиотекам работы с JSON.
  • Пакетные операции (batching): Возможность отправки нескольких запросов в одном HTTP-вызове, что повышает эффективность для асинхронных сценариев.
  • Независимость от транспорта: Может работать поверх HTTP, WebSockets, TCP и т.д.

Минусы:

  • Отсутствие стандартов для инфраструктуры: Нет встроенных механизмов для авторизации, кеширования, версионирования API или документации (в отличие от REST с OpenAPI).
  • Слабая типизация: Параметры и результаты — это JSON-структуры, что может приводить к ошибкам типов на этапе выполнения; требуется дополнительная валидация.
  • Менее информативные ошибки: Ошибки передаются в собственном формате, а не через стандартные HTTP-статусы, что может усложнить интеграцию с мониторингом и прокси-серверами.
  • Сложность с кешированием: Запросы, как правило, используют POST, что затрудняет кеширование на уровне HTTP по сравнению с GET-запросами в REST.

Пример запроса и ответа (JSON-RPC 2.0):

// Запрос
{
  "jsonrpc": "2.0",
  "method": "calculateSum",
  "params": {"a": 5, "b": 3},
  "id": 1
}

// Успешный ответ
{
  "jsonrpc": "2.0",
  "result": 8,
  "id": 1
}

// Ответ с ошибкой
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}