© Excellent backgrounds/Shutterstock.com
Dynamische Schnittstellenkommunikation mit JSON und REST

„Loserere“ Kopplung


Dieser Artikel zeigt, wie durch REST mit JSON praktisch ohne festen Kontrakt mit Services kommuniziert werden kann. Möglich wird dies durch generisches Mapping von benötigten und erhaltenen Feldern mittels rekursiver Tiefensuche im JSON-Objektgraphen. Dadurch wird der Unterschied in der Kopplung zwischen RPC-Verfahren wie SOAP mit Apriori-Schnittstellenkontrakt (wsdl, xsd), generierten Clientbibliotheken, Versionen etc. und dieser geradezu kontaktfreien dynamischen Kommunikation auf die Spitze getrieben.

Normalerweise denke ich mir eine Schnittstelle als eindeutig definierte Methode eines Objekts mit einer Anzahl von typisierten Transferobjekten für Parameter und Rückgabe. Mit anderen Worten: Wenn ich eine Schnittstelle nutzen will, muss ich das Objekt (bzw. den Aufruf) kennen und die benötigten Transferobjekte zur Verfügung haben. Das kennen wir von SOAP Web Services: Die WSDL beschreibt den nötigen Aufruf als Abstraktion eines Prozeduraufrufs (Remote Procedure Call, RPC) und das XSL Schema die benötigten Transferobjekte. Damit habe ich mich von der Schnittstelle und ihren Versionen abhängig gemacht. Mehr noch: Ich habe mir ein fremdes (und vielleicht unpassendes) Objektmodell in den Code geholt – eine generierte SOAP-Clientbibliothek mit evtl. hässlichem Namen und fremder Komposition. Ich kann versuchen, die Verbreitung dieser SOAP-Clientbibliothek in meinem Code zu begrenzen, aber dazu muss ich die Transferobjekte in einer eigenen Komponente isolieren und deren Daten in eigene Objekte umfüllen. Das ist aufwändig und überflüssig.

Es geht auch anders

Bei Benutzung von REST bestehen die zu übertragenden Daten aus JSON. Es müsste doch möglich sein, sich dieses JSON von einer remote Schnittstelle zu holen, ohne einen solchen Aufwand betreiben und ein fremdes Objektmodell importieren zu müssen. Und das geht tatsächlich: Der Schlüssel liegt in der JSON-Deserialisierung, die aus JSON Objekte erzeugt und befüllt. Normalerweise müssen die übergebenen Objekte der JSON-Struktur entsprechen, um erfolgreich gefüllt zu werden, und zwar sowohl syntaktisch als auch strukturell. Hätte man aber einen flexibleren JSON Object Mapper zur Verfügung, könnte man ihm ganz andere Objekte übergeben, und er könnte in JSON nach den zu den Feldern passenden Daten suchen, egal wo. Diese Flexibilität ist natürlich nicht komplett generisch zu erreichen: Es muss Kriterien geben, nach denen der JSON Object Mapper entscheiden kann, ob ein gegebenes Datum das richtige für ein bestimmtes F...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang