JSON-RPC (JavaScript Object Notation Remote Procedure Call) ist ein Protokoll zum Aufruf entfernter Methoden in Computersystemen, ähnlich wie XML-RPC (die Daten werden jedoch in JSON statt in XML gesendet).[1] Bei der Spezifikation wurde darauf geachtet, dass JSON-RPC über verschiedene Kommunikationsprotokolle genutzt werden kann. Dadurch kann es sehr flexibel eingesetzt werden. JSON-RPC erlaubt Anfragen in beide Richtungen. Zudem unterstützt das Protokoll asynchrone Kommunikation.
Funktionsweise
Dieser Abschnitt bezieht sich ausschließlich auf die Version 1.0. Bei späteren Versionen können Request und Response leicht anders aussehen.
Anfrage
Ein JSON-RPC-Call besteht aus einem JSON-Objekt, das vom Client an einen Server geschickt wird. Mögliche Anfragetypen sind
- Request (engl. Anfrage): Der Server soll eine Antwort liefern.
- Notification (engl. Benachrichtigung): Einwegkommunikation, vom Server wird keine Antwort erwartet.
- Batch Request (engl. Stapelanfrage): Mehrere Anfragen (Notifications oder Requests) werden zusammengefasst gesendet. (Verfügbar ab Version 2.0)
In der folgenden Tabelle sind die Eigenschaften eines Request-Objekts aufgelistet.
Eigenschaft | Beschreibung |
---|---|
method
|
Ein String mit dem Namen der Funktion die Aufgerufen werden soll. |
params
|
Ein Array mit den Parametern die der Funktion übergeben werden sollen. |
id
|
Ein eindeutiger Identifikator für die Nachricht. Kann jeden beliebigen Datentyp haben (i. d. R. Integer). |
Bei einer Notification ist id
immer null
.
Antwort
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 Eigenschaften eines Response-Objektes, sind in der folgenden Tabelle aufgelistet.
Eigenschaft | Beschreibung |
---|---|
result
|
Das Rückgabeobjekt der Funktion, oder null falls ein Fehler auftrat
|
error
|
Das Fehlerobjekt, null falls kein Fehler auftrat.
|
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 Bach-Response (d.h. die Antworten auf alle Requests im Batch-Request in einer Nachricht).
Beispiele
In diesen Beispielen steht -->
für eine Nachricht vom Client an der Server, und <--
umgekehrt.
Version 1.0
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.[2]
...
--> {"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
Die erste Version vom JSON-RPC stammt von 2005. Diese Version 1.0 ist immer noch die einzige offizielle Spezifikation. Es wird aber zur Zeit an einer Version 2.0 gearbeitet.
Version | Beschreibung | Datum |
---|---|---|
1.0 | Original version Im Moment die einzige offizielle Spezifikation[3] | 2005 |
1.1 WD | Working draft Benannte Parameter, spezifische Fehlercodes und introspektive Funktionen hinzugefügt. | 07.08.2006 |
1.1 Alt | Alternativer Vorschlag für 1.1 WD. | 06.05.2007 |
1.2 | Vorschlag Eine spätere Version wurde umbenannt in 2.0. | 27.12.2007 |
2.0 | Spezifikationsvorschlag | 24.05.2009 |
2.0 Revised | aktueller (überarbeiteter) Spezifikationsvorschlag | 26.03.2010 |
Implementierungen
JSON-RPC wurde in verschiedenen Programmiersprachen implementiert, darunter JavaScript, C/C++, C#, Java, Python und PHP[4]. Da JSON nur aus Text-Nachrichten besteht, kann es jedoch auch in anderen Programmiersprachen relativ einfach verwendet werden.
Siehe auch
- Die offizielle JSON-RPC-Webseite enthält unter anderem eine Liste der verfügbaren JSON-RPC-Implementationen.
- JSON-RPC-Google Group diskutiert Themen rund um JSON-RPC.