Clientanwendungen können Datenbankoperationen ausführen, indem sie Anforderungen an Web-Services senden, die diese Operationen anbieten. Die Anforderungen sind Nachrichten, die in einem der folgenden sechs Protokolle geschrieben sind:
Dieses Nachrichtenprotokoll wird in einigen Produkten nicht unterstützt.
Angenommen, eine Clientanwendung fordert z. B. einen Web-Service auf, eine Zeile in die Tabelle EMPLOYEE der DB2-Datenbank SAMPLE einzufügen. In diesem Fall lauten die Datentypen der Spalten in der Tabelle EMPLOYEE wie folgt:
Spaltenname | Datentyp |
---|---|
EMPNO | integer |
LASTNAME | varchar |
FIRSTNME | varchar |
SKILLS | XML |
In der folgenden Tabelle werden die Werte aus der neuen Zeile aufgeführt, die eingefügt werden soll:
Spaltenname | Wert |
---|---|
EMPNO | 200170 |
LASTNAME | Yamamoto |
FIRSTNME | Kiyoshi |
SKILLS | <skills> <languages> <language name="Japanese" native="yes" level="excellent"/> <language name="English" native="no" level="good"/> </languages> <softskills> <skill name="team leadership" level="good"/> <skill name="presentation" level="medium"/> </softskills> </skills> |
Im Web-Service wird die folgende Operation definiert:
INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)
Es folgt ein Beispiel der Nachricht, die eine Clientanwendung unter Verwendung des Protokolls SOAP/HTTP senden könnte.
POST /Sample/services/Sample HTTP/1.1 Host: localhost:8070 Content-Type: text/xml; charset=utf-8 Content-Length: 704 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: IBM Web Services Explorer Cache-Control: no-cache Pragma: no-cache SOAPAction: "http://www.example.org/insertEmployee" Connection: close <soapenv:Envelope xmlns:q0="http://www.example.org" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <q0:insertEmployee> <empno>200170</empno> <name>Yamamoto</name> <firstname>Kiyoshi</firstname> <skills> <skills> <languages> <language level="excellent" name="Japanese" native="yes"/> <language level="good" name="English" native="no"/> </languages> <softskills> <skill level="good" name="team leadership"/> <skill level="medium" name="presentation"/> </softskills> </skills> </skills> </q0:insertEmployee> </soapenv:Body> </soapenv:Envelope>
Es folgen Beispiele von REST-ähnlichen Nachrichten, die eine Clientanwendung senden könnte. Die Nachrichten beachten das REST-Format, verhalten sich jedoch nicht wie normale REST-Nachrichten, da sie nicht direkt auf eine Datenentität zugreifen. Sie führen stattdessen Funktionen aus. Nachrichten im Format GET fordern z. B. keine Kopie von einer Ressource an. Auch fügen Nachrichten im Format POST einer Ressource nicht unbedingt Informationen hinzu. Stattdessen sind GET- und POST-Nachrichten, die von Clientanwendungen gesendet werden, Anforderungen für das Ausführen von Operationen an Daten in einer Datenbank.
In REST-ähnlichen Nachrichten werden Nullwerte für XML-basierte Anforderungen und für Nicht-XML-Anforderungen unterschiedlich gehandhabt. In XML-basierten Anforderungen werden Nullwerte durch das Hinzufügen von xsi:nil="true" zum Parameterelement dargestellt. In Nicht-XML-Anforderungen werden Nullwerte nicht dargestellt, das heißt, der Parametername wird in der Parameter- oder Werteliste nicht angezeigt.
GET /Sample/RestEndpoint/Sample/insertEmployee?empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++ %3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+ native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csoftskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E% 0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%22%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A HTTP/1.1 User-Agent: Java/1.5.0 Host: localhost:8070 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Content-type: application/x-www-form-urlencoded
http://Server:Portnummer/Sample/RestEndpoint/Sample/insertEmployee?empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++ %3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+ native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csoftskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E% 0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%22%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0ADie URL muss UTF-8-Zeichen verwenden und dem RPC-2396-Standard entsprechen.
POST /Sample/RestEndpoint/Sample/insertEmployee HTTP/1.1 User-Agent: Java/1.5.0 Host: localhost:8070 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Content-type: application/x-www-form-urlencoded Content-Length: 485 empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+ native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csof tskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%2 2%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A
POST /Sample/RestEndpoint/Sample/insertEmployee HTTP/1.1 Content-Type: text/xml; charset=utf-8 User-Agent: Michael Accept: text/xml, application/dime, multipart/related, text/* Content-Length: 467 Host: localhost:8070 Connection: keep-alive <q0:insertEmployee xmlns:q0="http://www.example.org"><empno>200170</empno><name>Yamamoto</name><firstname>Kiyoshi</firstname><skills><skills> <languages> <language name="Japanese" native="yes" level="excellent"/> <language name="English" native="no" level="good"/> </languages> <softskills> <skill name="team leadership" level="good"/> <skill name="presentation" level="medium"/> </softskills> </skills></skills></q0:insertEmployee>
POST /Project1WebService1/rest/WebService1/insertEmployee HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Connection: keep-alive Content-Type: application/json;charset=utf-8 Content-Length: 395 {"insertEmployee":{"EMPNO":200170,"LASTNAME":"Yamamoto","FIRSTNME":"Kiyoshi","SKILLS":"<skills> <languages> <language name=\"Japanese\" native=\"yes\" level=\"excellent\"\/> <language name=\"English\" native=\"no\" level=\"good\"\/> <\/languages> <softskills> <skill name=\"team leadership\" level=\"good\"\/> <skill name=\"presentation\" level=\"medium\"\/> <\/softskills> <\/skills>"}}