JSON-RPC
JSON-RPC ( JavaScript Object Notation Remote Procedure Call ) er en protokol til opkald af fjernmetoder i computersystemer , der ligner XML-RPC (men dataene sendes i JSON i stedet for XML ). Under specifikationen blev der sørget for, at JSON-RPC ikke indeholder nogen unødvendig kompleksitet, og at den kan bruges via forskellige kommunikationsprotokoller . Det betyder, at det kan bruges meget fleksibelt. Derudover understøtter protokollen asynkron kommunikation , da alle forespørgsler og svar indeholder et ID, som muliggør nem tildeling af svar til de tilsvarende forespørgsler.
JSON-RPC 1.0 tillader anmodninger i begge retninger ( peer-to-peer ), men de fleste JSON-RPC 1.0-implementeringer understøtter kun en retning som standard ( klientservermodel ).
JSON-RPC 2.0 bruger en klientservermodel . Anmodninger i begge retninger er mulige ved at bruge en JSON-RPC-server på begge sider.
funktionalitet
forespørgsel
Et JSON-RPC-opkald består af et JSON-objekt , der sendes fra klienten til en server . Mulige anmodningstyper er
- Anmodning: Serveren skal levere et svar.
- Meddelelse: Envejskommunikation, der forventes ikke noget svar fra serveren.
- Batchanmodning: Flere anmodninger ( meddelelser eller anmodninger ) sendes sammen som et JSON-array, hvis elementer derefter er de enkelte anmodningsobjekter. (Tilgængelig fra version 2.0)
Følgende tabel viser komponenterne i et anmodningsobjekt.
| komponent | beskrivelse | kommentar |
|---|---|---|
jsonrpc
|
En streng med navnet på JSON-RPC-versionen ("2.0") | Fra version 2.0 |
method
|
En streng med navnet på den funktion, der skal kaldes. | |
params
|
Et array eller objekt, der indeholder de parametre, der skal sendes til funktionen. | Objekt fra version 2.0 mulig |
id
|
En unik identifikator for meddelelsen. Kan have en hvilken som helst datatype (normalt et heltal). |
En anmeldelse er kendetegnet ved, at:
- JSON-RPC version 2.0:
idmangler - JSON-RPC version 1.0:
idnuller
svar
I tilfælde af en anmodning sender serveren et svar tilbage til klienten som et JSON-objekt, efter at den anmodede metode er udført. Komponenterne i et responsobjekt er angivet i den følgende tabel.
| Komponenter | beskrivelse | kommentar |
|---|---|---|
jsonrpc
|
En streng med navnet på JSON-RPC-versionen ("2.0") | Fra version 2.0 |
result
|
Funktionens returobjekt, hvis der ikke opstod nogen RPC-fejl. Ellers:
|
|
error
|
Fejlobjektet, hvis der opstod en RPC-fejl. Ellers:
|
|
id
|
Indeholder den samme værdi som idden anmodning, der forårsagede dette svar.
|
Hvis serveren modtager en meddelelse, udfører den den angivne metode, men sender ikke et svar. Hvis den modtager en batchanmodning, udfører den de anførte metoder og sender et batchrespons (dvs. svarene på alle anmodninger i batchanmodningen i en meddelelse).
Eksempler
I disse eksempler står det -->for en besked fra klienten til serveren og <--omvendt.
Version 2.0
Et simpelt eksempel med en anmodning og et svar:
--> { "jsonrpc": "2.0", "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
<-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 1}
Samme eksempel med "navngivne parametre":
--> { "jsonrpc": "2.0", "method": "gibAus", "params": {"Nachricht": "Hallo JSON-RPC"}, "id": 2}
<-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 2}
Yderligere eksempler kan findes i slutningen af JSON-RPC 2.0-specifikationen.
Version 1.0
Et simpelt eksempel med en anmodning og et svar
--> { "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
<-- { "result": "Hallo JSON-RPC", "error": null, "id": 1}
Dette eksempel viser en del af kommunikationen i en chatapplikation. Chat-tjenesten sender en notifikation for hver besked, som klienten skal modtage. Klienten sender en anmodning om at sende en besked og forventer positiv feedback for at vide, at meddelelsen er blevet offentliggjort.
...
--> {"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}
...
historie
Den første version af JSON-RPC er fra 2005. Version 2.0 blev vedtaget i 2010.
| version | beskrivelse | dato |
|---|---|---|
| 1.0 | Oprindelig version | 2005 |
| Kladde "1.1 WD" | Begrænset til HTTP, navngivne parametre, specifikke fejlkoder og introspektive funktioner tilføjet. | 08/07/2006 |
| Kladde "1.1 Old" | Alternativt (forenklet) forslag til 1,1 WD. | 05/06/2007 |
| Kladde "1.2" | Let ændret version af 1.1 gammel. En senere version blev omdøbt til 2.0. | 27/12/2007 |
| 2.0 | nuværende specifikation | 2010 |
Implementeringer
JSON-RPC er implementeret i forskellige programmeringssprog, herunder JavaScript , C ++ , C , C # , Java , Python og PHP . Da JSON imidlertid består af Unicode-tegn, kan JSON-RPC også implementeres relativt let på andre programmeringssprog.
fordeling
Uanset hvor JSON-RPC bruges, er det sjældent et problem offentligt. Den 31. juli 2019 meddelte Google, at fra og med 12. august 2020 kun REST kan bruges til at få adgang til Google API'er i stedet for JSON-RPC .
Se også
- Det officielle JSON-RPC-websted
- JSON-RPC-Google Group diskuterer emner relateret til JSON-RPC.
- JSON-RPC specifikationer, links osv.
- Det officielle JSON-RPC 1.0-websted indeholder blandt andet en liste over de tilgængelige JSON-RPC 1.0-implementeringer. (Forældet)
Individuelle beviser
- ↑ specifikation - JSON-RPC - Trac ( Memento af den originale fra maj 17 2008 i den Internet Archive ) Info: Den arkiv link blev indsat automatisk, og er endnu ikke blevet kontrolleret. Kontroller original- og arkivlinket i henhold til instruktionerne, og fjern derefter denne meddelelse.
- ↑ Arkiv link ( Memento af den originale fra maj 17 2008 i den Internet Archive ) Info: Den arkiv link blev indsat automatisk, og er endnu ikke blevet kontrolleret. Kontroller original- og arkivlinket i henhold til instruktionerne, og fjern derefter denne meddelelse.
- ↑ http://www.simple-is-better.org/json-rpc/jsonrpc20.html
- ↑ RFC 4627-applikation / json
- ↑ Rainald Quantity-Sunny Day: Google trækker JSON-RPC-adgang tilbage. I: heise online. 2. august 2019, adgang til 4. august 2019 .