Informationen zum Mustercode 'RESTful Web Service Using JSON'

Der Mustercode 'RESTful Web Service Using JSON' veranschaulicht die Verwendung einiger JSON-Parserfunktionen, die in WebSphere Message Broker bereitgestellt werden. Der Mustercode verwendet eine REST-Schnittstellen zu einer WebSphere MQ-Anwendung. Die WebSphere MQ-Anwendung verwaltet eine Liste von CD-Daten mithilfe von XML-Nachrichten.

Nachrichtenflüsse

Dieser Mustercode besteht aus drei Hauptkomponenten.

Bei jedem der Nachrichtenflüsse steuert ein Testclient mit demselben Namen den Nachrichtenfluss.

Providernachrichtenfluss

Die folgende Abbildung zeigt die Struktur des Web-Service-Providers HttpJsonRestProvider.msgflow dieses Mustercodes aus dem Nachrichtenbrokerprojekt 'JSONRESTSample'.

Screenshot des Providernachrichtenflusses des Mustercodes 'RESTful Web Service Using JSON'

Abschnitt A

Der HTTPInput-Knoten 'HTTP JSON Input', für den die Eigenschaft Abfragezeichenfolge syntaktisch analysieren aktiviert ist, ist für eine Nachricht empfangsbereit. Wenn der Anfrage-URI eine Abfragezeichenfolge enthält (die von JSONP verwendet wird), wird die Abfragezeichenfolge in der lokalen Umgebung gespeichert. Für den HTTPInput-Knoten ist auch die Eigenschaft Set destination list (Zieladressenliste einstellen) aktiviert, sodass die HTTP-Methode zur Zieladressenliste für die Label-Weiterleitung im RouteToLabel-Knoten hinzugefügt wird (REST-Methode 'RouteTo'). Die Zieladressenliste für die Label-Weiterleitung wird später im Nachrichtenfluss verwendet.

Der nächste Knoten ist ein Compute-Knoten mit dem Namen 'StoreHttpReqId'. Dieser Compute-Knoten speichert das Ziel, das er aus dem letzten Teil des Anfrage-URI extrahiert. Beispiel: http://localhost:7080/jsonrequest/Ziel. Der Compute-Knoten speichert außerdem die HTTP-Anforderungs-ID. Das Ziel und die HTTP-Anforderungs-ID werden zur späteren Verwendung im Nachrichtenfluss in der Umgebung gespeichert.

Abschnitt B

Abhängig von der HTTP-Methode der Eingabenachricht wird die Nachricht entweder an einen JavaCompute- oder Compute-Knoten übergeben.

Obwohl die Funktion dieser Knoten vergleichbar ist, zeigen Sie, wie auf die JSON-Baumstruktur zugegriffen und wie die Nachricht mithilfe von JAV oder ESQL in ein anderes Datenformat (XML) konvertiert wird.

Weitere Informationen zur Verwendung verschiedener Sprachen, einschließlich PHP, für den Zugriff auf JSON finden Sie in der WebSphere Message Broker-Dokumentation unter Modifying a JSON message (JSON-Nachricht ändern).

Abschnitt C

Die Nachricht wird anschließend in eine Warteschlange gestellt, die von der WebSphere MQ-Back-End-Anwendung verarbeitet wird. Die WebSphere MQ-Back-End-Anwendung enthält einen MQOutput-Knoten mit dem Namen 'MQOutput (APP_IN1)', der eine Nachricht an den Compute-Knoten 'WriteHttpReqId' sendet. Der Compute-Knoten 'WriteHttpReqId' erzeugt eine Nachricht, die die Variablen der lokalen Umgebung enthält, die zuvor im Nachrichtenfluss erstellt wurden. Der MQHeader-Knoten 'MQ Header' stellt die neue Nachricht in die Warteschlange STOREQ1 und verwendet dazu den MQOutput-Knoten 'MQOutput (STOREQ1)'.

Abschnitt D

Der MQInput-Knoten 'MQInput (APP_OUT1)' empfängt die Nachricht von der WebSphere MQ-Anwendung. Der MQGet-Knoten 'MQGet (STOREQ1)' empfängt eine korrelierende Nachricht aus der Warteschlange STOREQ1. Wenn ein Fehler auftritt, wird er vom Throw-Knoten 'ThrowRestoreHttpReqIdError' abgefangen, der dazu dient, einen Fehlerpfad durch den Nachrichtenfluss zu erzwingen, falls die Nachricht nicht erwartete Daten enthält. Der Compute-Knoten 'JSON Reply' speichert die Anforderungs-ID in der lokalen Umgebung, die vom HTTPReply-Knoten 'HTTP JSON Reply' verwendet wird. Wenn die ursprüngliche HTTP-Anforderung eine Abfragezeichenfolge enthält, wird die Abfragezeichenfolge als Auffüllwert in einer JSONP-Nachricht verwendet.

Weitere Informationen zur Bereitstellung und Nutzung von JSONP-Services finden Sie in der WebSphere Message Broker-Dokumentation unter JSONP support in the JSON domain (JSONP-Unterstützung in der JSON-Domäne).

Nutzernachrichtenfluss

Dieser Mustercode enthält zwei separate Nachrichtenflüsse, die den Web-Service und den JSONP-Nutzernachrichtenfluss nutzen können.

WebSphere MQ-JSON-Nutzer

Der erste Nachrichtenfluss MqJsonClientConsumer.msgflow verwendet JSON über WebSphere MQ und zeigt, wie ein HTTP-REST-Service aus WebSphere MQ aufgerufen wird, indem mithilfe einer besonderen Eingabewarteschlange die REST-Methode definiert wird.

Screenshot des JSON-Nutzernachrichtenflusses

Dieser Nachrichtenfluss enthält vier MQInput-Knoten, einen für jede der REST-Methoden:

Der Compute-Knoten 'BuildRestRequest' nimmt die Nachricht aus diesen Warteschlangen und erstellt eine Anforderung, die an den RESTful-Service gesendet werden soll. Je nach REST-Architektur erweitert der Compute-Knoten auch die Ziel-URL um den Namen des Objekts, für das die Anforderung gilt. Die Eigenschaft Rechenmodus dieses Knotens ist auf Lokale Umgebung und Nachricht gesetzt, sodass die Ziel-URL und die HTTP-Methode, die in der lokalen Umgebung gespeichert sind, über den Nachrichtenfluss weitergegeben werden.

Der HTTPRequest-Knoten 'HTTP REST Request' übergibt seine Nachricht an den RESTful-Service. Welche Nachricht vom RESTful-Service zurückgegeben wird, ist von der aufgerufenen Methode abhängig.

Der Compute-Knoten 'RestoreMQMD' speichert den MQMD-Header zurück in die Ausgabenachricht und sendet sie über den MQOutput-Knoten 'MQ Output (JSON_REPLY1)' an die Warteschlange 'JSON_REPLY'.


WebSphere MQ-XML-Nutzer für JSON-REST-Service

Der zweite Nachrichtenfluss (MqXmlClientConsumer.msgflow) zeigt, wie ein HTTP-RESTful-JSON-Service von einem WebSphere MQ-XML-Client genutzt wird, wie XML nach JSON konvertiert wird und wie ein geeigneter REST-Methodenaufruf durchgeführt wird.

Screenshot des XML-Nutzernachrichtenflusses

Dieser Nachrichtenfluss enthält einen einzelnen MQInput-Knoten mit dem Namen 'MQ Input (XML_CONS_IN1)', über den alle REST-Methoden weitergegeben werden. Da für den Web-Service eine JSON-Nachricht erforderlich ist, wandeln die Compute-Knoten 'XML-JSON' und 'JSON-XML' die Nachricht von XML nach JSON bzw. von JSON nach XML um.

Der Compute-Knoten 'XML-JSON' führt ähnliche Tasks wie der Compute-Knoten 'BuildRestRequest' aus, der im Abschnitt 'WebSphere MQ-JSON-Nutzer' beschrieben wird. Statt jedoch für jede HTTP-Methode eine andere Warteschlange zu verwenden, wird nur eine einzige Warteschlange verwendet und der Typ der HTTP-Methode als Wert in der XML-Nachricht gespeichert. Dieser Knoten stellt außerdem das Member-Element als JSON-Feldgruppe mit folgendem Code ein:

SET OutputRoot.JSON.Data = InputRoot.XMLNSC.Collection.CD;
DECLARE membersArray REFERENCE TO OutputRoot.JSON.Data.Members;
IF LASTMOVE(membersArray) THEN
	-- Format the Members element as a JSON Array
	SET  membersArray TYPE = JSON.Array;
END IF;

Weitere Informationen zur Verwendung verschiedener Sprachen, einschließlich Java und PHP, zum Ändern und Umwandeln von JSON-Nachrichten finden Sie in der WebSphere Message Broker-Dokumentation unter Modifying a JSON message (JSON-Nachricht ändern).

JSONP-Nutzer

Der JSONP-Nutzer ist ein Web-Front-End, der JavaScript für den direkten Zugriff auf den Provider verwendet. Das folgende Diagramm zeigt das Ergebnis des JavaScript-Codes in der Datei JSONPConsumer.html:

Screenshot des JSONP-Scripts

Sie können die Abfrage ändern, indem Sie den folgenden HTML-JavaScript-Tag ändern:

<script type="text/javascript" src="http://localhost:7080/jsonrequest/*?jsonp=parseResponse"></script>
Wenn Sie beispielsweise die Abfrage in folgenden Code ändern, werden alle CDs mit dem Titel "IX" zurückgegeben:
<script type="text/javascript" src="http://localhost:7080/jsonrequest/IX?jsonp=parseResponse"></script>

Weitere Informationen zu JSONP finden Sie in der WebSphere Message Broker-Dokumentation unter Providing a JSONP service (JSONP-Service bereitstellen) und Consuming a JSONP service response (JSONP-Serviceantwort nutzen).


Back-End-Anwendungsnachrichtenfluss

Das folgende Diagramm zeigt den WebSphere MQ-Back-End-Anwendungsnachrichtenfluss MqXmlApp.msgflow:

Screenshot der WebSphere MQ-Back-End-Anwendung

Dieser Nachrichtenfluss enthält einen MQInput-Knoten mit dem Namen 'MQ XML Input (APP_IN1)' und einen Compute-Knoten mit dem Namen 'Application', der die Musterdaten bei seiner ersten Ausführung initialisiert. Diese Daten werden in einer Langzeitvariablen gespeichert, die während der gesamten Implementierungszeit des Nachrichtenflusses bestehen bleibt. Der Compute-Knoten führt außerdem abhängig vom Inhalt der XML-Nachricht eine CRUD-Funktion (Create = Erstellen, Retrieve = Abrufen, Update = Aktualisieren, Delete = Löschen) für die Daten aus. Schließlich wird die Nachricht an die WebSphere MQ-Warteschlange 'APP_OUT1' des MQOutput-Knotens 'MQ XML Output (APP_OUT1)' weitergegeben.

Nachrichten

Der Nutzernachrichtenfluss wird von einer WebSphere MQ-Nachricht gesteuert. Es wird eine Testclientdatei bereitgestellt, die den Mustercode unter Verwendung der folgenden Nachrichten ausführt:

Abrufen

Wenn folgende Nachricht an die Warteschlange 'RETRIEVE_IN1' gesendet wird, werden die Daten über alle CDs zurückgegeben:

{
 "Title" : "*"
}

Wenn folgende Nachricht an die Warteschlange 'RETRIEVE_IN1' gesendet wird, werden CD-Daten für alle CDs mit dem Titel "Friars Ball" zurückgegeben.

{
 "Title" : "Friars Ball"
}

Beide oben genannten Nachrichten geben eine Nachricht in folgendem Format zurück:

{"Title":"Friars Ball","Artist":"Deep Blue","Country":"UK","Price":"9.90","Year":"1971","Members":
["Liam Gillan","Alan Blackmore","Phil Glover","David Paice","Tom Lord"]}

Löschen

Wenn folgende JSON-Nachricht an die Warteschlange 'DELETE_IN1' gesendet wird, werden die Daten für alle CDs mit dem Titel "Friars Ball" gelöscht.

{
 "Title" : "Friars Ball"
}

Bei erfolgreicher Ausführung wird folgende Nachricht zurückgegeben:

{"Status":"Success"}

Erstellen und aktualisieren

Wenn folgende Nachricht an die Warteschlange 'UPDATE_IN1' gesendet wird, werden die Daten für alle CDs mit dem Titel "Friars Ball" geändert; es wird nur der aktualisierte Datensatz zurückgegeben. Wenn die Nachricht an die Warteschlange 'CREATE_IN1' gesendet wird, wird ein vollständig neuer Eintrag erstellt; es werden alle Daten zurückgegeben, einschließlich des neuen Eintrags.

{
 "Title" : "Friars Ball",
  "Artist" : "Deep Orange",
  "Country" : "United Kingdom",
  "Price" : 19.90,
  "Year"  : 2010,
  "Members":["Liam Gillan","Alan Blackmore","Phil Glover","David Paice","Tom Lord"]
}

Zurück zum Beginn des Mustercodes