クライアント・アプリケーションは、データベース操作を提供する Web サービスに要求を送信することによってこれらの操作を実行できます。 要求は、以下の 6 つのプロトコルのいずれかに従うメッセージです。
このメッセージ・プロトコルをサポートしない製品もあります。
例えば、クライアント・アプリケーションが、DB2® SAMPLE データベースの EMPLOYEE 表に行を挿入するように Web サービスに要求するとします。EMPLOYEE 表の列のデータ・タイプは以下のとおりです。
列の名前 | データ・タイプ |
---|---|
EMPNO | integer |
LASTNAME | varchar |
FIRSTNME | varchar |
SKILLS | XML |
以下の表に、挿入する新規の行の値をリストします。
列の名前 | 値 |
---|---|
EMPNO | 200170 |
LASTNAME | Yamamoto |
FIRSTNME | Kiyoshi |
SKILLS |
|
以下は、Web サービスで定義される操作です。
INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)
以下は、クライアント・アプリケーションが 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 メッセージのようには動作しません。 代わりに、これらのメッセージは関数を実行します。 例えば、GET 形式のメッセージはリソースのコピーを要求しません。 さらに、POST 形式のメッセージは情報をリソースに追加するとは限りません。 代わりに、クライアント・アプリケーションが送信する GET メッセージと POST メッセージは両方とも、データベース内のデータに対して操作を実行するようにとの要求です。
REST に類似したメッセージでは、XML ベースの要求と XML 以外の要求とで NULL 値の扱いが異なります。 XML ベースの要求では、NULL 値は xsi:nil="true" をパラメーター・エレメントに追加することによって表されます。 XML 以外の要求では、NULL 値は不在として表されます。つまり、パラメーター名はパラメーターまたは値リストに表示されません。
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: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 規格に準拠していなければなりません。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>"}}