クライアント・アプリケーションは、データベース操作を提供する Web サービスに要求を送信することによってこれらの操作を実行できます。 要求は、以下の 6 つのプロトコルのいずれかに従うメッセージです。
このメッセージ・プロトコルをサポートしない製品もあります。
例えば、クライアント・アプリケーションが、DB2® SAMPLE データベースの EMPLOYEE 表に行を挿入するように Web サービスに要求するとします。EMPLOYEE 表の列のデータ・タイプは以下のとおりです。
列の名前 | データ・タイプ |
---|---|
EMPNO | integer |
LASTNAME | varchar |
FIRSTNME | varchar |
SKILLS | XML |
以下の表に、挿入する新規の行の値をリストします。
列の名前 | 値 |
---|---|
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 プロトコルを使用して送信可能なメッセージの例です。
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%0AURL は 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>"}}