JSON-RPC

JSON-RPC ( Llamada a procedimiento remoto de notación de objetos JavaScript ) es un protocolo para llamar a métodos remotos en sistemas informáticos , similar a XML-RPC (pero los datos se envían en JSON en lugar de XML ). Durante la especificación, se tuvo cuidado para asegurar que JSON-RPC no contenga ninguna complejidad innecesaria y que pueda usarse a través de varios protocolos de comunicación . Esto significa que se puede utilizar de forma muy flexible. Además, el protocolo admite la comunicación asíncrona , ya que todas las consultas y respuestas contienen un ID, que permite asignar fácilmente las respuestas a las consultas correspondientes.

JSON-RPC 1.0 permite solicitudes en ambas direcciones (de igual a igual ), pero la mayoría de las implementaciones de JSON-RPC 1.0 solo admiten una dirección de forma predeterminada ( modelo cliente-servidor ).

JSON-RPC 2.0 utiliza un modelo cliente-servidor . Las solicitudes en ambas direcciones son posibles mediante el uso de un servidor JSON-RPC en ambos lados.

funcionalidad

consulta

Una llamada JSON-RPC consta de un objeto JSON que se envía desde el cliente a un servidor . Los posibles tipos de solicitud son

  • Solicitud: el servidor debe entregar una respuesta.
  • Notificación: comunicación unidireccional, no se espera respuesta del servidor.
  • Solicitud por lotes: varias solicitudes ( notificaciones o solicitudes ) se envían juntas como una matriz JSON, cuyos elementos son los objetos de solicitud individuales. (Disponible a partir de la versión 2.0)

La siguiente tabla enumera los componentes de un objeto de solicitud.

componente descripción comentario
jsonrpc Una cadena con el nombre de la versión JSON-RPC ("2.0") Desde la versión 2.0
method Una cadena con el nombre de la función a llamar.
params Una matriz u objeto que contiene los parámetros que se pasarán a la función. Objeto de la versión 2.0 posible
id Un identificador único para el mensaje. Puede tener cualquier tipo de datos (normalmente un número entero).

Una notificación se caracteriza por el hecho de que:

  • JSON-RPC versión 2.0: idfalta
  • JSON-RPC versión 1.0: id nulles

respuesta

En el caso de una solicitud, el servidor envía una respuesta al cliente como un objeto JSON después de que se haya ejecutado el método solicitado. Los componentes de un objeto de respuesta se enumeran en la siguiente tabla.

Componentes descripción comentario
jsonrpc Una cadena con el nombre de la versión JSON-RPC ("2.0") Desde la versión 2.0
result Objeto de retorno de la función si no se produjo ningún error de RPC. De lo contrario:
  • Versión 2.0: este campo se omite.
  • Versión 1.0: este campo tiene el valor null.
error Objeto de error si se produjo un error de RPC. De lo contrario:
  • Versión 2.0: este campo se omite.
  • Versión 1.0: este campo tiene el valor null.
id Contiene el mismo valor que idla solicitud que provocó esta respuesta.

Si el servidor recibe una notificación, ejecuta el método especificado, pero no envía una respuesta. Si recibe una solicitud por lotes, ejecuta los métodos enumerados y envía una respuesta por lotes (es decir, las respuestas a todas las solicitudes en la solicitud por lotes en un mensaje).

Ejemplos de

En estos ejemplos representa -->un mensaje del cliente al servidor y <--viceversa.

Versión 2.0

Un ejemplo simple con una solicitud y una respuesta:

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

Mismo ejemplo con "parámetros con nombre":

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

Se pueden encontrar más ejemplos al final de la especificación JSON-RPC 2.0.

Versión 1.0

Un ejemplo simple con una solicitud y una respuesta.

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

Este ejemplo muestra parte de la comunicación en una aplicación de chat. El servicio de chat envía una notificación por cada mensaje que debe recibir el cliente. El cliente envía una solicitud para enviar un mensaje y espera comentarios positivos para saber que el mensaje ha sido publicado.

...
--> {"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}
...

historia

La primera versión de JSON-RPC es de 2005. La versión 2.0 se adoptó en 2010.

versión descripción fecha
1.0 Versión original 2005
Borrador "1.1 WD" Restringido a HTTP, se agregaron parámetros con nombre, códigos de error específicos y funciones introspectivas. 07/08/2006
Borrador "1.1 Antiguo" Propuesta alternativa (simplificada) para 1.1 WD. 06/05/2007
Borrador "1.2" Versión anterior ligeramente modificada 1.1. Una versión posterior fue renombrada a 2.0. 27/12/2007
2.0 especificación actual 2010

Implementaciones

JSON-RPC se ha implementado en varios lenguajes de programación, incluidos JavaScript , C ++ , C , C # , Java , Python y PHP . Sin embargo, dado que JSON consta de caracteres Unicode, JSON-RPC también se puede implementar con relativa facilidad en otros lenguajes de programación.

distribución

Dondequiera que se use JSON-RPC, rara vez es un problema en público. El 31 de julio de 2019, Google anunció que a partir del 12 de agosto de 2020, solo se puede usar REST para acceder a las API de Google en lugar de JSON-RPC .

Ver también

Evidencia individual

  1. especificación - JSON-RPC - Trac ( Memento de la original, del 17 de mayo de 2008 en el Archivo de Internet ) Información: El archivo de enlace se inserta de forma automática y sin embargo no ha sido comprobado. Verifique el enlace original y de archivo de acuerdo con las instrucciones y luego elimine este aviso.  @ 1@ 2Plantilla: Webachiv / IABot / json-rpc.org
  2. enlace del archivo ( recuerdo de la original, del 17 de mayo de 2008 en el Archivo de Internet ) Información: El archivo de enlace se inserta de forma automática y sin embargo no ha sido comprobado. Verifique el enlace original y de archivo de acuerdo con las instrucciones y luego elimine este aviso.  @ 1@ 2Plantilla: Webachiv / IABot / json-rpc.org
  3. http://www.simple-is-better.org/json-rpc/jsonrpc20.html
  4. Aplicación RFC 4627 / json
  5. Rainald Cantidad-Día soleado: Google está retirando el acceso JSON-RPC. En: heise online. 2 de agosto de 2019, consultado el 4 de agosto de 2019 .