JSON-RPC

JSON-RPC ( удаленный вызов процедур с нотацией объектов JavaScript ) - это протокол для вызова удаленных методов в компьютерных системах , аналогичный XML-RPC (но данные отправляются в JSON вместо XML ). Во время спецификации было уделено внимание тому, чтобы JSON-RPC не содержал ненужной сложности и мог использоваться через различные протоколы связи . Это означает, что его можно очень гибко использовать. Кроме того, протокол поддерживает асинхронную связь , поскольку все запросы и ответы содержат идентификатор, который позволяет легко назначать ответы на соответствующие запросы.

JSON-RPC 1.0 разрешает запросы в обоих направлениях ( одноранговая сеть ), но большинство реализаций JSON-RPC 1.0 по умолчанию поддерживают только одно направление ( модель клиент-сервер ).

JSON-RPC 2.0 использует модель клиент-сервер . Запросы в обоих направлениях возможны при использовании сервера JSON-RPC с обеих сторон.

функциональность

расследование

Вызов JSON-RPC состоит из объекта JSON, который отправляется от клиента на сервер . Возможные типы запросов:

  • Запрос: сервер должен доставить ответ.
  • Уведомление: односторонняя связь, ответа от сервера не ожидается.
  • Пакетный запрос: несколько запросов ( уведомлений или запросов ) отправляются вместе в виде массива JSON, элементы которого затем являются отдельными объектами запроса. (Доступно с версии 2.0)

В следующей таблице перечислены компоненты объекта запроса.

составная часть описание комментарий
jsonrpc Строка с названием версии JSON-RPC («2.0») Начиная с версии 2.0
method Строка с именем вызываемой функции.
params Массив или объект, содержащий параметры, которые необходимо передать функции. Возможен объект с версии 2.0
id Уникальный идентификатор сообщения. Может иметь любой тип данных (обычно целое число).

Уведомление характеризуется тем, что:

  • JSON-RPC версии 2.0: idотсутствует
  • JSON-RPC версии 1.0: id nullесть

отвечать

В случае запроса сервер отправляет ответ клиенту в виде объекта JSON после выполнения запрошенного метода. Компоненты объекта ответа перечислены в следующей таблице.

Составные части описание комментарий
jsonrpc Строка с названием версии JSON-RPC («2.0») Начиная с версии 2.0
result Возвращаемый объект функции, если ошибки RPC не произошло. Иначе:
  • Версия 2.0: это поле опущено.
  • Версия 1.0: это поле имеет значение null.
error Объект ошибки, если произошла ошибка RPC. Иначе:
  • Версия 2.0: это поле опущено.
  • Версия 1.0: это поле имеет значение null.
id Содержит то же значение, что idи запрос, вызвавший этот ответ.

Если сервер получает уведомление, он выполняет указанный метод, но не отправляет ответ. Если он получает пакетный запрос, он выполняет перечисленные методы и отправляет пакетный ответ (т. Е. Ответы на все запросы в пакетном запросе в одном сообщении).

Примеры

В этих примерах обозначает -->сообщение от клиента серверу и <--наоборот.

Версия 2.0

Простой пример с запросом и ответом:

--> { "jsonrpc": "2.0", "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
<-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 1}

Тот же пример с «именованными параметрами»:

--> { "jsonrpc": "2.0", "method": "gibAus", "params": {"Nachricht": "Hallo JSON-RPC"}, "id": 2}
<-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 2}

Дополнительные примеры можно найти в конце спецификации JSON-RPC 2.0.

Версия 1.0

Простой пример с запросом и ответом

--> { "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
<-- { "result": "Hallo JSON-RPC", "error": null, "id": 1}

В этом примере показана часть общения в приложении чата. Служба чата отправляет уведомление для каждого сообщения, которое должен получить клиент. Клиент отправляет запрос на отправку сообщения и ожидает положительной обратной связи, чтобы узнать, что сообщение было опубликовано.

...
--> {"method": "veröffentlicheNachricht", "params": ["Hallo an alle!"], "id": 99}
<-- {"result": 1, "error": null, "id": 99}
<-- {"method": "empfangeNachricht", "params": ["Benutzer1", "Wir unterhielten uns gerade"], "id": null}
<-- {"method": "empfangeNachricht", "params": ["Benutzer3", "Ich muss jetzt los, tschüss"], "id": null}
--> {"method": "veröffentlicheNachricht", "params": ["Ich habe eine Frage!"], "id": 101}
<-- {"method": "ändereStatus", "params": ["abwesend","Benutzer3"], "id": null}
<-- {"result": 1, "error": null, "id": 101}
...

история

Первая версия JSON-RPC выпущена в 2005 году. Версия 2.0 была принята в 2010 году.

версия описание Дата
1.0 Оригинальная версия 2005 г.
Осадка "1.1 WD" Ограничено HTTP, добавлены именованные параметры, конкретные коды ошибок и интроспективные функции. 07.08.2006
Проект «1.1 Старый» Альтернативное (упрощенное) предложение для 1.1 WD. 06.05.2007
Осадка «1.2» Немного измененная версия 1.1 старая. Более поздняя версия была переименована в 2.0. 27.12.2007
2.0 текущая спецификация 2010 г.

Реализации

JSON-RPC реализован на различных языках программирования, включая JavaScript , C ++ , C , C # , Java , Python и PHP . Однако, поскольку JSON состоит из символов Unicode, JSON-RPC также может быть относительно легко реализован на других языках программирования.

распределение

Где бы ни использовался JSON-RPC, это редко становится проблемой для публики. 31 июля 2019 года Google объявил, что с 12 августа 2020 года для доступа к API Google можно использовать только REST вместо JSON-RPC .

Смотри тоже

Индивидуальные доказательства

  1. спецификация - JSON-RPC - Trac ( Memento из в оригинале от 17 мая 2008 года в Internet Archive ) Info: архив ссылка была вставлена автоматически и еще не была проверена. Проверьте исходную и архивную ссылку в соответствии с инструкциями, а затем удалите это уведомление.  @ 1@ 2Шаблон: Webachiv / IABot / json-rpc.org
  2. Архив ссылка ( Memento из в оригинале с 17 мая 2008 года в Internet Archive ) Info: архив ссылка была вставлена автоматически и еще не была проверена. Проверьте исходную и архивную ссылку в соответствии с инструкциями, а затем удалите это уведомление.  @ 1@ 2Шаблон: Webachiv / IABot / json-rpc.org
  3. http://www.simple-is-better.org/json-rpc/jsonrpc20.html
  4. Приложение RFC 4627 / json
  5. Rainald Quantity-Sunny Day: Google прекращает доступ к JSON-RPC. В: heise online. 2 августа 2019, доступ к 4 августа 2019 .