Nachdem wir uns nun mit der Struktur von JSON-Objekten auskennen, wollen wir den nächsten Schritt gehen und JSON für die Kommunikation zwischen einem “Server” und einem “Client” nutzen.
Neben simplen JSON-Requests gibt es ein Protokoll, das uns über JSON den Aufruf von Funktionen auf entfernten Computern ermöglicht: JSON-RPC (JavaScript Object Notation Remote Procedure Call).
Wie sieht ein JSON-Request aus?
JSON-Requests können ganz einfach, z.B. über http-requests realisiert werden.
Optimalerweise bieten sich POST- oder GET-Anfragen besonders an, da ihnen ein JSON-Objekt problemlos als Payload mitgegeben werden kann.
Ein Request über http setzt sich also wie folgt zusammen:
HTTP-Request-Art | POST oder GET |
Header | “Content-Type: application/json” (Der Header sorgt dafür, dass der Empfänger weiß, dass es sich beim Payload um ein JSON-Objekt handelt und es entsprechend verarbeitet) |
Payload | Ein JSON-Objekt |
Ein Beispiel auf der Konsole könnte wie folgt aussehen:
curl -X POST http://example.com/some/path -H "Content-Type: application/json" -d '{"version": "1.1", "method":"progr","id":2,"params":{"call":...} }'
curl ist ein Kommandozeilen-Tool, mit dem URL-Transfers initiiert werden können (bzw. URLs aufgerufen werden können).
Der Parameter -X definiert hierbei, dass die darauf folgende URL als POST Request abgesetzt wird. Darauf folgt die aufzurufende URL und mit dem -H Parameter, dem der Header folgt. Der -d Parameter steht für “data”, hier wird der Payload für den POST-Request definiert. In diesem Fall ein JSON-Objekt.
Was ist JSON-RPC?
JSON-RPC ist ein Protokoll, das den Aufruf von Methoden auf entfernten Computern ermöglicht. Es wird also z.B. von einem Client eine http-Anfrage an einen Server geschickt (mit dem Payload eines JSON-Objekts), der zu dieser spezifischen Anfrage eine Funktion ausführt.
JSON-RPC definiert mehrere mögliche Arten von Anfragen, die wichtigsten sind:
- Request: Eine Anfrage, auf die der Server eine Antwort liefern soll
- Eine Notification: Auf diese Anfrage wird keine Antwort vom Server verlangt
Wie JSON-RPC funktioniert: Beispiele!
Anfrage:
{ “jsonrpc”: “2.0”, “method”: “GibStringAus”, “params”: [“Hello World”], “id”: 1}
Ein JSON-RPC-Objekt zu einer Anfrage (Request) muss demnach folgende Bestandteile haben:
Die entfernte Methode, die aufgerufen werden soll
Bestandteil | Erklärung | Im Beispiel |
json-rpc | Definition der JSON-RPC Version | 2.0 |
method | GibStringAus | |
params | Parameter, die der Funktion übergeben werden sollen | “Hello World” |
id | Eine eindeutige ID, damit Requests und Responses zugeordnet werden können | 1 |
Antwort:
{ “jsonrpc”: “2.0”, “result”: “Hello World”, “id”: 1}
Ein JSON-RPC-Objekt zu einer Antwort (Response)muss demnach folgende Bestandteile haben:
Bestandteil | Erklärung | Im Beispiel |
json-rpc | Definition der JSON-RPC Version | 2.0 |
result | Der Rückgabewert der entfernten Funktion | “Hello World” |
error | Falls ein Fehler aufgetreten ist, wir ein Fehlerobjekt zurück gegeben | |
id | Eine eindeutige ID, damit Requests und Responses zugeordnet werden können | 1 |
Wo kann ich JSON-RPC verwenden?
Es finden sich Implementationen/Libraries für alle gängigen Programmiersprachen. Von JavaScript über C/C++/C#, Java, Python und PHP ist alles vertreten.
Viel Spaß beim Entwickeln 😉