JSON-RPC

JSON-RPC ( JavaScript Object Notation Remote Procedure Call ) è un protocollo per chiamare metodi remoti nei sistemi informatici , simile a XML-RPC (ma i dati vengono inviati in JSON anziché in XML ). Durante la specifica, è stata prestata attenzione per garantire che JSON-RPC non contenga complessità inutili e che possa essere utilizzato tramite vari protocolli di comunicazione . Ciò significa che può essere utilizzato in modo molto flessibile. Inoltre, il protocollo supporta la comunicazione asincrona , poiché tutte le richieste e le risposte contengono un ID, che consente una facile assegnazione delle risposte alle richieste corrispondenti.

JSON-RPC 1.0 consente richieste in entrambe le direzioni ( peer-to-peer ), ma la maggior parte delle implementazioni JSON-RPC 1.0 supporta solo una direzione per impostazione predefinita ( modello client-server ).

JSON-RPC 2.0 utilizza un modello client-server . Le richieste in entrambe le direzioni sono possibili utilizzando un server JSON-RPC su entrambi i lati.

funzionalità

inchiesta

Una chiamata JSON-RPC è costituita da un oggetto JSON inviato dal client a un server . I possibili tipi di richiesta sono

  • Richiesta: il server dovrebbe fornire una risposta.
  • Notifica: comunicazione unidirezionale, non è prevista alcuna risposta dal server.
  • Richiesta batch: diverse richieste ( notifiche o richieste ) vengono inviate insieme come un array JSON, i cui elementi sono quindi i singoli oggetti richiesta. (Disponibile dalla versione 2.0)

La tabella seguente elenca i componenti di un oggetto richiesta.

componente descrizione commento
jsonrpc Una stringa con il nome della versione JSON-RPC ("2.0") Dalla versione 2.0
method Una stringa con il nome della funzione da chiamare.
params Un array o un oggetto contenente i parametri da passare alla funzione. Oggetto dalla versione 2.0 possibile
id Un identificatore univoco per il messaggio. Può avere qualsiasi tipo di dati (solitamente un numero intero).

Una notifica è caratterizzata dal fatto che:

  • JSON-RPC versione 2.0: idmancante
  • JSON-RPC versione 1.0: id nullè

risposta

Nel caso di una richiesta, il server invia una risposta al client come oggetto JSON dopo che il metodo richiesto è stato eseguito. I componenti di un oggetto risposta sono elencati nella tabella seguente.

Componenti descrizione commento
jsonrpc Una stringa con il nome della versione JSON-RPC ("2.0") Dalla versione 2.0
result L'oggetto restituito della funzione se non si è verificato alcun errore RPC. Altrimenti:
  • Versione 2.0: questo campo viene omesso.
  • Versione 1.0: questo campo ha il valore null.
error L'oggetto errore se si è verificato un errore RPC. Altrimenti:
  • Versione 2.0: questo campo viene omesso.
  • Versione 1.0: questo campo ha il valore null.
id Contiene lo stesso valore iddella richiesta che ha causato questa risposta.

Se il server riceve una notifica, esegue il metodo specificato, ma non invia una risposta. Se riceve una richiesta batch, esegue i metodi elencati e invia una risposta batch (cioè le risposte a tutte le richieste nella richiesta batch in un messaggio).

Esempi

In questi esempi sta -->per un messaggio dal client al server e <--viceversa.

Versione 2.0

Un semplice esempio con una richiesta e una risposta:

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

Stesso esempio con "parametri denominati":

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

Ulteriori esempi possono essere trovati alla fine della specifica JSON-RPC 2.0.

Versione 1.0.0

Un semplice esempio con una richiesta e una risposta

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

Questo esempio mostra parte della comunicazione in un'applicazione di chat. Il servizio di chat invia una notifica per ogni messaggio che il client dovrebbe ricevere. Il client invia una richiesta per inviare un messaggio e si aspetta un feedback positivo per sapere che il messaggio è stato pubblicato.

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

storia

La prima versione di JSON-RPC è del 2005. La versione 2.0 è stata adottata nel 2010.

versione descrizione Data
1.0 Versione originale 2005
Bozza "1.1 WD" Limitato a HTTP, aggiunti parametri denominati, codici di errore specifici e funzioni introspettive. 08/07/2006
Bozza "1.1 Vecchia" Proposta alternativa (semplificata) per 1.1 WD. 05/06/2007
Bozza "1.2" Versione leggermente modificata della vecchia 1.1, una versione successiva è stata rinominata 2.0. 27/12/2007
2.0 specifica corrente 2010

Implementazioni

JSON-RPC è stato implementato in vari linguaggi di programmazione, inclusi JavaScript , C ++ , C , C # , Java , Python e PHP . Tuttavia, poiché JSON è costituito da caratteri Unicode, JSON-RPC può anche essere implementato in modo relativamente semplice in altri linguaggi di programmazione.

distribuzione

Ovunque venga utilizzato JSON-RPC, raramente è un problema in pubblico. Il 31 luglio 2019, Google ha annunciato che dal 12 agosto 2020 sarà possibile utilizzare solo REST per accedere alle API di Google anziché JSON-RPC .

Guarda anche

Prove individuali

  1. specifica - JSON-RPC - Trac ( Memento del l' originale dal 17 maggio 2008 a l' Internet Archive ) Info: Il dell'archivio collegamento è stato inserito automaticamente e non è stata ancora verificata. Controllare l'originale e il collegamento all'archivio secondo le istruzioni, quindi rimuovere questo avviso.  @ 1@ 2Modello: Webachiv / IABot / json-rpc.org
  2. collegamento Archive ( Memento del l' originale dal 17 maggio 2008 a l' Internet Archive ) Info: Il dell'archivio collegamento è stato inserito automaticamente e non è stata ancora verificata. Controllare l'originale e il collegamento all'archivio secondo le istruzioni, quindi rimuovere questo avviso.  @ 1@ 2Modello: Webachiv / IABot / json-rpc.org
  3. http://www.simple-is-better.org/json-rpc/jsonrpc20.html
  4. RFC 4627 application / json
  5. Rainald Quantity-Sunny Day: Google ritirerà l'accesso JSON-RPC. In: heise online. 2 agosto 2019, accesso 4 agosto 2019 .