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:
idnullè
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:
|
|
error
|
L'oggetto errore se si è verificato un errore RPC. Altrimenti:
|
|
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
- Il sito Web ufficiale JSON-RPC
- Il gruppo JSON-RPC-Google discute argomenti relativi a JSON-RPC.
- Specifiche JSON-RPC, collegamenti, ecc.
- Il sito Web ufficiale JSON-RPC 1.0 contiene, tra le altre cose, un elenco delle implementazioni JSON-RPC 1.0 disponibili. (Obsoleto)
Prove individuali
- ↑ 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.
- ↑ 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.
- ↑ http://www.simple-is-better.org/json-rpc/jsonrpc20.html
- ↑ RFC 4627 application / json
- ↑ Rainald Quantity-Sunny Day: Google ritirerà l'accesso JSON-RPC. In: heise online. 2 agosto 2019, accesso 4 agosto 2019 .