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:
idnullесть
отвечать
В случае запроса сервер отправляет ответ клиенту в виде объекта JSON после выполнения запрошенного метода. Компоненты объекта ответа перечислены в следующей таблице.
| Составные части | описание | комментарий |
|---|---|---|
jsonrpc
|
Строка с названием версии JSON-RPC («2.0») | Начиная с версии 2.0 |
result
|
Возвращаемый объект функции, если ошибки RPC не произошло. Иначе:
|
|
error
|
Объект ошибки, если произошла ошибка RPC. Иначе:
|
|
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 .
Смотри тоже
- Официальный сайт JSON-RPC
- Группа JSON-RPC-Google обсуждает темы, связанные с JSON-RPC.
- Спецификации JSON-RPC, ссылки и т. Д.
- Официальный веб-сайт JSON-RPC 1.0 содержит, среди прочего, список доступных реализаций JSON-RPC 1.0. (Устарело)
Индивидуальные доказательства
- ↑ спецификация - JSON-RPC - Trac ( Memento из в оригинале от 17 мая 2008 года в Internet Archive ) Info: архив ссылка была вставлена автоматически и еще не была проверена. Проверьте исходную и архивную ссылку в соответствии с инструкциями, а затем удалите это уведомление.
- ↑ Архив ссылка ( Memento из в оригинале с 17 мая 2008 года в Internet Archive ) Info: архив ссылка была вставлена автоматически и еще не была проверена. Проверьте исходную и архивную ссылку в соответствии с инструкциями, а затем удалите это уведомление.
- ↑ http://www.simple-is-better.org/json-rpc/jsonrpc20.html
- ↑ Приложение RFC 4627 / json
- ↑ Rainald Quantity-Sunny Day: Google прекращает доступ к JSON-RPC. В: heise online. 2 августа 2019, доступ к 4 августа 2019 .