Unterstützte Nachrichtenprotokolle

Clientanwendungen können auf Web-Services zugreifen, indem sie Nachrichten senden, die das Protokoll SOAP/HTTP oder SOAP/JMS oder drei REST-ähnliche Nachrichtenprotokolle verwenden.

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:

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:

Tabelle 1. Die Spalten der Tabelle EMPLOYEE
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:

Tabelle 2. Die Werte, die in die Tabelle EMPLOYEE eingefügt werden sollen
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)

Beispieleingabenachricht, die das Nachrichtenprotokoll SOAP/HTTP verwendet

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>

Beispieleingabenachrichten, die die REST-ähnlichen Nachrichtenprotokolle verwenden

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.

Beispieleingabenachricht, die das REST-ähnliche HTTP GET (url-encoded) verwendet
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
Die Ergebnis-URL für die Anforderung ähnelt der folgenden:
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%0A
Die URL muss UTF-8-Zeichen verwenden und dem RPC-2396-Standard entsprechen.
Beispieleingabenachricht, die das REST-ähnliche HTTP POST (URL-codiert) verwendet
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
Beispieleingabenachricht, die das REST-ähnliche HTTP POST (Text/XML) verwendet
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>
Beispieleingabenachricht, die das REST-ähnliche HTTP POST (JSON) verwendet
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>"}}

Feedback