Zum Inhalt springen

JSON-RPC

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 6. Juli 2011 um 01:11 Uhr durch Gutschi (Diskussion | Beiträge) (Anfrage). Sie kann sich erheblich von der aktuellen Version unterscheiden.
QS-Informatik
Beteilige dich an der Diskussion!
Dieser Artikel wurde wegen inhaltlicher Mängel auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+)


Begründung: Lemma wird nicht OMA-tauglich erklärt, Relevanz wird nicht dargestellt, Wikifizierung notwendig -- Sarion !? 14:11, 18. Apr. 2011 (CEST)

JSON-RPC (JavaScript Object Notation Remote Procedure Call) ist eine 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.

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

Eine JSON-RPC-Call besteht aus einem JSON-Objektes, das vom Client an ein Server geschickt wird. Dabei sehen 3 verschiedene Typen von Anfragen zur Verfügung:

  • Notifications (engl. Benachrichtigungen): Von Server wird keine Antwort erwartet (Einwegkommunikation)
  • Requests (engl. Anfragen): Der Server soll eine Antwort liefern
  • Batch Requests (engl. Stapelanfragen; ab Version 2.0): Mehrere Anfragen (Notifications oder Requests) zusammen gesendet.

Ein Anfrage Object besteht immer aus 3 Eigenschaften:

  • method: Ein String mit dem Namen der Funktion die Aufgerufen werden sollte
  • params: Ein Array mit den Parametern die der Funktion übergeben werde sollen
  • id: Eine eindeutige Identifikation für die Nachricht. Kann jeden beliebigen Typen haben, ist aber in der Regeln ein Integer


Bei einer Notification ist die id immer Null.

Antwort

In Fall eines Requests schickt der Server nach der Ausführung der angeforderten Methode eine Antwort als JSON-Objekt zurück an den Client. Ein Antwortobjekt besteht immer aus den Parametern

  • result: Das Rückgabeobject der Funktion, oder null falls ein Fehler auftrat
  • error: Das Fehlerobjekt, Null falls kein Fehler auftrat
  • id: Die 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 in dem Batch-Request in einer Nachricht).

Beispiele

In diesen Beispielen steht --> für eine Anfrage eines Clients (request), während <-- für eine Antwort des Servers (response). (Obwohl diese Richtung oft als Antwort bezeichnet wird, impliziert dies, abhängig von der JSON-RPC-Version, nicht unbedingt, dass sie die Anfrage direkt beantwortet.)

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}
...

Spezifikationen

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

Siehe auch

Einzelnachweise

  1. http://groups.google.com/group/json-rpc/web/json-rpc-2-0
  2. specification - JSON-RPC - Trac
  3. http://groups.google.com/group/json-rpc/msg/c5633df97dc8f16f