サポートされるメッセージ・プロトコル

クライアント・アプリケーションは、SOAP/HTTP または SOAP/JMS メッセージ・プロトコル、あるいは REST に類似した 3 つのメッセージ・プロトコルを使用するメッセージを送信することによって、Web サービスにアクセスすることができます。

クライアント・アプリケーションは、データベース操作を提供する Web サービスに要求を送信することによってこれらの操作を実行できます。 要求は、以下の 6 つのプロトコルのいずれかに従うメッセージです。

例えば、クライアント・アプリケーションが、DB2® SAMPLE データベースの EMPLOYEE 表に行を挿入するように Web サービスに要求するとします。EMPLOYEE 表の列のデータ・タイプは以下のとおりです。

表 1. EMPLOYEE 表の列
列の名前 データ・タイプ
EMPNO integer
LASTNAME varchar
FIRSTNME varchar
SKILLS XML

以下の表に、挿入する新規の行の値をリストします。

表 2. EMPLOYEE 表に挿入する値
列の名前
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>

以下は、Web サービスで定義される操作です。

INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)

SOAP/HTTP メッセージ・プロトコルを使用する入力メッセージの例

以下は、クライアント・アプリケーションが SOAP/HTTP プロトコルを使用して送信可能なメッセージの例です。

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>

REST に類似したメッセージ・プロトコルを使用する入力メッセージの例

以下は、クライアント・アプリケーションが送信可能な REST に類似したメッセージの例です。 メッセージは REST 形式に従いますが、データ・エンティティーに直接アクセスしないため、通常の REST メッセージのようには動作しません。 代わりに、これらのメッセージは関数を実行します。 例えば、GET 形式のメッセージはリソースのコピーを要求しません。 さらに、POST 形式のメッセージは情報をリソースに追加するとは限りません。 代わりに、クライアント・アプリケーションが送信する GET メッセージと POST メッセージは両方とも、データベース内のデータに対して操作を実行するようにとの要求です。

REST に類似したメッセージでは、XML ベースの要求と XML 以外の要求とで NULL 値の扱いが異なります。 XML ベースの要求では、NULL 値は xsi:nil="true" をパラメーター・エレメントに追加することによって表されます。 XML 以外の要求では、NULL 値は不在として表されます。つまり、パラメーター名はパラメーターまたは値リストに表示されません。

REST に類似した HTTP GET (URL エンコード) を使用する入力メッセージの例
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
要求の結果の URL は次のようになります。
http://server:port_number/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
URL は UTF-8 文字を使用し、RPC 2396 規格に準拠していなければなりません。
REST に類似した HTTP POST (URL エンコード) を使用する入力メッセージの例
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
REST に類似した HTTP POST (text/xml) を使用する入力メッセージの例
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>
REST に類似した HTTP POST (JSON) を使用する入力メッセージの例
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>"}}

フィードバック