JSON-RPC (JavaScript Object Notation Remote Procedure Call) ist ein Protokoll zum Aufruf von Methoden in entfernten Computersystemen, ähnlich wie XML-RPC (die Daten werden jedoch in JSON statt in XML gesendet). Bei der Spezifikation wurde darauf geachtet, dass JSON-RPC möglichst keine unnötige Komplexität enthält und über verschiedene Kommunikationsprotokolle genutzt werden kann. Dadurch kann es sehr flexibel eingesetzt werden. Zudem unterstützt das Protokoll asynchrone Kommunikation, da alle Anfragen und Antworten eine ID enthalten, was eine einfache Zuordnung von Antworten zu den entsprechenden Anfragen ermöglicht.
JSON-RPC 1.0 erlaubt Anfragen in beide Richtungen (Peer-to-Peer), die meisten JSON-RPC 1.0 Implementierungen unterstützen jedoch standardmäßig nur eine Richtung (Client-Server-Modell).
JSON-RPC 2.0 verwendet ein Client-Server-Modell. Anfragen in beide Richtungen sind möglich, indem auf beiden Seiten ein JSON-RPC-Server verwendet wird.
Funktionsweise#edit
Anfrage#edit
Ein JSON-RPC-Call besteht aus einem JSON-Objekt, das vom Client an einen Server geschickt wird. Mögliche Anfragetypen sind
- Request (englisch für: „Anfrage“): Der Server soll eine Antwort liefern.
- Notification (englisch für: „Benachrichtigung“): Einwegkommunikation, vom Server wird keine Antwort erwartet.
- Batch Request (englisch für: „Stapelanfrage“): Mehrere Anfragen (Notifications oder Requests) werden zusammengefasst als JSON-Array gesendet, dessen Elemente dann die einzelnen Request-Objekte sind. (Verfügbar ab Version 2.0)
In der folgenden Tabelle sind die Bestandteile eines Request-Objekts aufgelistet.
| Bestandteil | Beschreibung | Bemerkung |
|---|---|---|
jsonrpc | Ein String mit dem Namen der JSON-RPC-Version ("2.0") | Ab Version 2.0 |
method | Ein String mit dem Namen der Funktion, die aufgerufen werden soll. | |
params | Ein Array oder Objekt mit den Parametern, die der Funktion übergeben werden sollen. | Objekt ab Version 2.0 möglich |
id | Ein eindeutiger Identifikator für die Nachricht. Kann jeden beliebigen Datentyp haben (i. d. R. Integer). |
Eine Notification zeichnet sich dadurch aus, dass:
- JSON-RPC Version 2.0:
idfehlt - JSON-RPC Version 1.0:
idnullist
Antwort#edit
Im Fall eines Requests schickt der Server nach der Ausführung der angeforderten Methode eine Antwort als JSON-Objekt zurück an den Client. Die Bestandteile eines Response-Objektes sind in der folgenden Tabelle aufgelistet.
| Bestandteile | Beschreibung | Bemerkung |
|---|---|---|
jsonrpc | Ein String mit dem Namen der JSON-RPC-Version („2.0“) | Ab Version 2.0 |
result | Das Rückgabeobjekt der Funktion, falls kein RPC-Fehler auftrat. Andernfalls: Version 2.0: wird dieses Feld weggelassen. Version 1.0: hat dieses Feld den Wert null. | |
error | Das Fehlerobjekt, falls ein RPC-Fehler auftrat. Andernfalls: Version 2.0: wird dieses Feld weggelassen. Version 1.0: hat dieses Feld den Wert null. | |
id | Enthält den gleichen Wert wie id des Requests, der diese Response verursacht hat. |
Erhält der Server eine Notification, führt er die angegebene Methode aus, sendet jedoch keine Antwort. Erhält er einen Batch-Request, führt er die aufgelisteten Methoden aus, und sendet eine Batch-Response (d. h. die Antworten auf alle Requests im Batch-Request in einer Nachricht).
Beispiele#edit
In diesen Beispielen steht --> für eine Nachricht vom Client an der Server, und <-- umgekehrt.
Version 2.0#edit
Ein einfaches Beispiel mit einer Anfrage und einer Antwort:
--> { "jsonrpc": "2.0", "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1} <-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 1}
Gleiches Beispiel mit "named parameters":
--> { "jsonrpc": "2.0", "method": "gibAus", "params": {"Nachricht": "Hallo JSON-RPC"}, "id": 2} <-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 2}
Weitere Beispiele finden sich am Ende der JSON-RPC 2.0 Spezifikation.
Version 1.0#edit
Ein einfaches Beispiel mit einer Anfrage und einer Antwort
--> { "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
<-- { "result": "Hallo JSON-RPC", "error": null, "id": 1}
Dieses Beispiel zeigt einen Teil der Kommunikation in einer Chat-Anwendung. Der Chat-Dienst sendet eine Notification für jede Nachricht, die der Client erhalten soll. Der Client sendet einen Request, um eine Nachricht zu senden und erwartet eine positive Rückmeldung, um zu wissen, dass die Nachricht veröffentlicht wurde.[1]
...
--> {"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}
...
Versionsgeschichte#edit
Die erste Version vom JSON-RPC stammt von 2005. Die Version 2.0 wurde 2010 verabschiedet.
| Version | Beschreibung | Datum |
|---|---|---|
| 1.0 | Original-Version[2] | 2005 |
| Entwurf „1.1 WD“ | Auf HTTP eingeschränkt, benannte Parameter, spezifische Fehlercodes und introspektive Funktionen hinzugefügt. | 07.08.2006 |
| Entwurf „1.1 Alt“ | Alternativer (vereinfachter) Vorschlag für 1.1 WD. | 06.05.2007 |
| Entwurf „1.2“ | Leicht modifizierte Variante von 1.1 Alt. Eine spätere Version wurde in 2.0 umbenannt. | 27.12.2007 |
| 2.0 | aktuelle Spezifikation[3] | 2010 |
Implementierungen#edit
Verbreitung#edit
Weblinks#edit
- Die offizielle JSON-RPC Website
- JSON-RPC-Google Group diskutiert Themen rund um JSON-RPC.
- JSON-RPC Spezifikationen, Links usw. simple-is-better.org
- Die offizielle JSON-RPC 1.0 Website enthält unter anderem eine Liste der verfügbaren JSON-RPC 1.0 Implementierungen (veraltet).
Einzelnachweise#edit
- specification – JSON-RPC – Trac. (Memento des Originals vom 17. Mai 2008 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis. json-rpc.org
- json-rpc.org (Memento des Originals vom 17. Mai 2008 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- simple-is-better.org
- RFC: 4627 – application/json. (englisch).
- Rainald Menge-Sonnentag: Google schickt JSON-RPC-Zugriff in Rente. In: heise online. 2. August 2019, abgerufen am 4. August 2019.
References#
- ^ specification – JSON-RPC – Trac. (Memento des Originals vom 17. Mai 2008 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis. json-rpc.org
- ^ json-rpc.org (Memento des Originals vom 17. Mai 2008 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ^ simple-is-better.org
- ^ RFC: 4627 – application/json. (englisch).
- ^ Rainald Menge-Sonnentag: Google schickt JSON-RPC-Zugriff in Rente. In: heise online. 2. August 2019, abgerufen am 4. August 2019.
This article is mirrored from “JSON-RPC” on Deutsch Wikipedia, revision 237912169, written by Wikipedia's contributors and licensed CC BY-SA 4.0. Editing it here creates a Quire copy with its own history.
Synced with Wikipedia revision 237912169 · just now