WebServiceの世界


1.概要

 Webサービスとは「ネットワーク上の分散したアプリケーションを連携させる技術」。HTTPやXMLといった汎用の技術をベースとしている。一般のファイアウォールはHTTPに対して透過的なので、Webサービスを利用することで、ファイアウォールの外部からもサービスを享受出来るメリットがある。

 既に書店には数多の参考書が並んでいる。ここでは下記を参考に挙げておく。

SOAP/UDDI/WSDL Webサービス技術 http://www.gihyo.co.jp/books/syoseki.php/4-7741-1616-5

 また下記の@ITサイトやIBMサイトで学習すれば、参考書を購入しなくても十分情報入手が可能である。

@ITのWebService http://www.atmarkit.co.jp/fxml/#0

IBMサイト http://www-6.ibm.com/jp/developerworks/webservices/


2.SOAP(Simple Object Access Protocol)

2-1. 概要

 SOAPは名前の通りプロトコルである。つまりメッセージ通信時のデータフォーマットを決めた規約である。Webサービスの世界ではこのSOAPプロトコルに従って、サーバー・クライアント間でデータ送信が行なわれる。

w3cのXMLプロトコルワーキンググループ http://www.w3.org/2000/xp/Group/

SOAP Version 1.2 Part 0: Primer http://www.w3.org/TR/2003/REC-soap12-part0-20030624/

2-2. 構造  

SOAPの構造

POST /getTest HTTP/1.1
Host: www.test.co.jp
Content-Type: application/soap.xml : charset="utf-8"
Content-Length: nnnn

<?xml version="1.0"?>
<soapenv:Envelop>
 <soap:Header>
  <q:Query>
   <q:Ref>uuid:xxx........</q:Ref>
  </q:Query>
 </soap:Header>
 <soap:Body>
  <m:Get>
   <m:GetName>てすと<m:GetName>
  <m:Get>
 </soap:Body>
</soapenv:Envelop>
プロトコルバインディングヘッダ




SOAPエンベロープ
SOAPヘッダ




SOAPボディ

 上記からも判るようにSOAPはSOAPエンベロープ(封筒)に入ったSOAPヘッダとSOAPボディから構成されている。上の例は単純な1メッセージの例だが、複数メッセージが混在するような環境ではXMLの名前空間を使って、個々のSOAPメッセージをユニーク化させることが出来る。

 SOAPではエラーの発生時にSOAPフォルトというエラーメッセージを呼出し元に返すこともできる。

HTTP/1.1 500 Internal Server Error
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:Body>
  <soapenv:Fault>
   <faultcode>soapenv::Server</faultcode>
   <faultstring>Server Error</faultstring>
   <detail>
    <e:myfaultdetails xmlns:e="http://www.abc.co.jp/faults">
     <message>My application didn't work</message>
     <errorcode>1001</errorcode>
    </e:myfaultdetails>
   </detail>
  </soapenv:Fault>
 </soapenv:Body>
</soapenv:Envelope>



3.WSDL (Web Services Description Language)

3-1. 概要

WSDLはCORBAにおけるIDLに相当するインターフェイス記述言語である。下記サイトでWSDL 1.1が勧告されている。

w3cのWSDLページ http://www.w3.org/TR/wsdl

WSDL2.0 ドラフト = http://www.w3.org/TR/wsdl20/ 

3-2. WSDLで使用される主な要素

wsdl:definitions要素 WSDL文書の最上位要素
wsdl:types要素 メッセージのフォーマットを定義する際に使用する型を、抽象的に定義する。wsdl:types要素は省略可能だが、メッセージ定義にユーザー定義の型を使用する場合は、ここで型を定義しておく必要がある
wsdl:message要素 Webサービスで使用するメッセージのフォーマットを抽象的に定義する。wsdl:types要素で定義された型はここで使用する
wsdl:operation要素 入出力メッセージや、エラー情報を通知するために使用するフォルトメッセージのフォーマットとして、wsdl:message要素で定義されたフォーマットを割り当てる。入力と出力とフォルトメッセージ出力を行う処理の1単位である操作(operation)を抽象的に定義する
wsdl:portType要素 関連する操作をひとまとめにした抽象的なポートである、ポートタイプ(portType)を定義する
wsdl:binding要素 wsdl:portType要素で定義されたポートタイプ内の個々の抽象的な操作に、具体的な通信プロトコルをバインドする。ポートタイプの定義に通信プロトコルをバインドした定義のことをバインディング(binding)と呼ぶ。具体的な通信プロトコルへのバインドは、拡張性要素を使用して記述する
wsdl:port要素 wsdl:binding要素で定義されたバインディングに、通信エンドポイントのネットワークアドレスをバインドして具体的なポートを定義する。ネットワークアドレスのバインドは拡張性要素を使用して記述する

3-3. WSDLの具体的な例

w3cのWSDLの例 http://www.w3.org/TR/wsdl#_wsdl


4.UDDI (Universal Description, Discovery and Integration)

4-1. 概要

 Webサービスを登録・公開し、検索する仕組みの仕様をUDDIと呼ぶ。

OASISのUDDIページ http://www.uddi.org/

4-2. UDDIで使われる要素

businessEntity 企業名、連絡先、業種分類コードなどのビジネス情報
businessService その企業が提供しているサービスの名前、内容、分類などのサービス情報
bindingTemplate Webサービスへのアクセスポイントやパラメータなどの技術情報
tModel Webサービスの仕様やWSDL文書のURLなどのサービス仕様
publisherAssertion 企業間の関係

4-3. パブリックUDDI

Microsoft = http://uddi.microsoft.com/

IBM = https://uddi.ibm.com/ubr/registry.html


5.実践例

5-1. 東大のWebService http://www.dis.h.u-tokyo.ac.jp/byomei/WebServices/index.html

病名 XML WebServiceと題し、メソッドを公開している。

上記を利用した実装事例 http://www4.ocn.ne.jp/~mark44/TIPS/WebService/webservice.htm

上で利用しているOffice XP Web Services Toolkit 2.0 の使用方法 (EXCELをWebServiceクライアントにする)

http://www.microsoft.com/japan/office/previous/xp/developer/webservices/toolkit.asp

5-2. Wbサービス同好会 http://objectclub.esm.co.jp/webservice/

東名高速料金計算など

5-3. amazon Webサービス http://www.amazon.co.jp/exec/obidos/subst/associates/join/webservices.html/249-1945366-3341120

商品情報の取り込みなど

5-4. XML Webサービス実験室 http://www.unisys.co.jp/net/

日本ユニシスのページ

5-5. XMethods http://www.xmethods.com/

WebServibeの実例集 (英語)


6.セキュリティ

 WebServiceはB2Bのビジネスユースを念頭に考案されたものであり、セキュリティの確保は最重要問題である。HTTPの代わりにHTTPSを利用して、それだけで十分ということはない。W3CあるいはIBM、Microsoftといった企業間協議で各種のセキュリティ手法について議論されている。

6-1. XML正規化 (Canonical XML)

次のデジタル署名の前提となにる正規化手法はW3Cにて議論されてきた。

http://www.w3.org/TR/2001/REC-xml-c14n-20010315

6-2. XMLデジタル署名 (XML-Signature Syntax and Processing)

XMLに署名することで、それが本物と確認可能になる。

http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/

6-3. XML暗号化 (XML Encryption Syntax and Processing)

XML暗号化を利用することでXMLの全体あるいは部分について暗号化が可能である。

http://www.w3.org/TR/xmlenc-core/

6-4. WS-Security (Web Services Security)

WS-SecurityはIBM、Microsoft、Verisignにより2002年に制定されたが、2004年にOASISに移行している。

http://www-106.ibm.com/developerworks/webservices/library/ws-secure/


7.その他

Sun の Java Web Service http://java.sun.com/webservices/index.jsp

Apacheの Web Service http://ws.apache.org/

ApacheのXML Security http://xml.apache.org/security/

X.509の説明 http://www.ipa.go.jp/security/fy10/contents/over-all/02/21.html


2004.10.31 Y.Ozawa