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: id nuller

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:
  • Version 2.0: dette felt er udeladt.
  • Version 1.0: dette felt har værdien null.
error Fejlobjektet, hvis der opstod en RPC-fejl. Ellers:
  • Version 2.0: dette felt er udeladt.
  • Version 1.0: dette felt har værdien null.
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å

Individuelle beviser

  1. 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.  @ 1@ 2Skabelon: Webachiv / IABot / json-rpc.org
  2. 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.  @ 1@ 2Skabelon: Webachiv / IABot / json-rpc.org
  3. http://www.simple-is-better.org/json-rpc/jsonrpc20.html
  4. RFC 4627-applikation / json
  5. Rainald Quantity-Sunny Day: Google trækker JSON-RPC-adgang tilbage. I: heise online. 2. august 2019, adgang til 4. august 2019 .