トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Webサービス

[カテゴリ:基礎技術]

用語

Webサービス

  • OS/言語に依存しない部品を提供するサービス
  • 自己完結した疎結合なビジネスロジックをWeb上に展開したもの
  • クライアントプログラムのプラットフォームや開発言語に関係なく利用可能
  • かなり曖昧な言葉で時と場合によって解釈がことなる。
  • Webサービスの3者モデル
    • プロバイダ、ブローカ、リクエスタ
    • WSDL、SOAP、UDDI

WSDL(Web Services Description Language)

SOAP(Simple object Access Protocol)

  • WSDLに基づいてデータを交換するためのプロトコル
  • SOAP over HTTP、SOAP over SMTP などなど

SOAP over HTTP

  • 下位レイヤにHTTPを使ったSOAP
  • HTTPであるがゆえのメリット/デメリット
    • Webの為に構築された既存のインフラをそのまま利用可能
    • 従って容易にファイアウォールを越えることが可能
    • ステートレス(リクエストをまたがって状態を維持できない)
    • 信頼性が保証されない(往復の伝送路のどこで異常がおきたか判断できない)
    • 信頼性はアプリケーション側での実装が必要

SOAP-RPC

  • SOAPを使ってRPC(Remote Procedure Call)を行う

Webサービスに至るまでの技術経緯

  • マイクロソフト(1企業独自仕様)
    • DCOM(Distributed Component Object Model)
    • MIDL(Microsoft Interface Definition Language)
  • OMG(1団体独自仕様)
    • CORBA
    • IDL(Interface Definition Language)
  • いずれもインターネット標準には至らず。。。
  • インターネット標準としてのWebサービスへの期待

WebアプリとWebサービス

  • Webアプリ
    • 「WWWブラウザ:IEなど」と「WWWサーバ(Webアプリ):CGI,ASP,Servlet,JSP,PHPなど」
    • HTTPで通信
    • 人間による対話操作を前提としている為、主にB2C(Business to Consumer)向け
    • B2Cなのでトランザクションは少ない
  • Webサービス
    • 「リクエスタ(クライアントプログラム)」と「プロバイダ(Webサービス)」
    • SOAPで通信
    • B2B(Business to Business)、B2G(Business to Govemment)向け
    • B2Bなのでトランザクションは多い

SOAP

2つの形式

  • ドキュメントリテラル形式
  • SOAP-RPC形式

SOAP1.1仕様

SOAPメッセージの流れ

+----------+ SOAPメッセージ(リクエスト)+----------+
|          |---------------------------->|          |
|リクエスタ|                             |プロバイダ|
|          |<----------------------------|          |
+----------+ SOAPメッセージ(レスポンス)+----------+

SOAPメッセージの構造

SOAPメッセージ
+-------------------------------------------------+
|プロトコルヘッダ                                 |
|  →HTTP等のトランスポートプロトコル固有ヘッダ   |
+-------------------------------------------------+
|SOAPエンベロープ                                 |
|  →XMLベースの記述                              |
|    +----------------------------+               |
|    |SOAPヘッダ(オプション)    |               |
|    | :                          |               |
|    +----------------------------+               |
|    |SOAPボディ                  |               |
|    | :                          |               |
|    +----------------------------+               |
+-------------------------------------------------+

SOAPフォルト

SOAPメッセージのやり取りにおいて、エラーが発生したときにSOAPボディに記述されるエラー

SOAPエンコーディング

開発言語(Java,VB,Cなど)のオリジナルの型変数を、言語に依存しない型に相互変換する。

  • 単純型
    • Integer型
    • String型など
    • 列挙
    • バイト列
  • 複合型
    • 構造体
    • 配列

SOAP over HTTP

トランスポートプロトコルにHTTPを使ってSOAPを実現

            +----------------------------+
            |HTTPプロトコルヘッダ        |
            |  POST hogeService HTTP/1.1 |
            |   :                        |
            +----------------------------+
            |SOAPエンベロープ            |
            |   :  (XMLで記述)           |
            +----------------------------+
                         ||
                         ||
+----------+ SOAPメッセージ(リクエスト)+----------+
|          |---------------------------->|          |
|リクエスタ|                             |プロバイダ|
|          |<----------------------------|          |
+----------+ SOAPメッセージ(レスポンス)+----------+
                         ||
                         ||
            +----------------------------+
            |HTTPプロトコルヘッダ        |
            |  HTTP/1.1 200 OK           |
            |   :                        |
            +----------------------------+
            |SOAPエンベロープ            |
            |   :  (XMLで記述)           |
            +----------------------------+

SOAP-RPC

ローカルマシンのプロシジャコール(LPC)を、ネットワーク経由のプロシジャコール(RPC)に拡張する為の仕組み
ミドルウェアを使用することで、アプリケーションから見ればあたかもLPCと同等の手順でRPCが可能となる。

ans = method(p)
 ↑      ↓
SOAPミドルウェア
 ↑      ↓
SOAPメッセージ
 ↑      ↓
SOAPミドルウェア
 ↑      ↓
public String method(String S){...}

SOAPのセキュリティ

  • SOAP over HTTP
    • HTTPのセキュリティ使用をそのまま利用
    • RFC2617:Bsaic認証、Digest認証
    • RFC2246:TLS/SSLによる伝送路の暗号化
    • HTTPは Point to Point プロトコルである為、End to End で一環したセキュリティは確保できない。
  • WS-Security
    • SOAPメッセージそのものにセキュリティを施す仕様
    • SOAPエンベロープはXMLである為、XMLの署名・暗号化の仕様を利用
    • Microsoft、IBM、Verisignが策定したWebサービスセキュリティに関する標準化仕様
  • SOAP Security Extensions: Digital Signature
    • SOAPメッセージにデジタル署名を施す仕様
    • 今後は、WS-Securityによるデジタル署名が標準になってゆく。

SOAPの添付ファイル

大きな画像や動画などの大容量バイナリをやり取りする場合、SOAPエンベロープにバイト配列を記述する方法では、エンベロープが巨大化し処理時間が増加する問題がある。
そこで、エンベロープとバイナリデータを分離することが求められる。

仕様乱立気味っぽい・・・?

  • SOAP Messages with Attachments
    • W3Cノート
    • 電子メールで使われているマルチパートMIME(RFC2387)を利用
  • DIME+WS-Attachments
    • Microsoft、IBM策定
    • DIME:バイナリデータの表記法?
    • WS-Attachments:SOAPメッセージにデータを付加するための仕様

WSDL

Webサービスの仕様を記述する為の仕様

WSDL文書の構造

Webサービスの仕様は以下の構造で定義される。
→「プロバイダがどのようなサービスを提供しているのか?」をXMLで表記する為のルール
→かなり汎用的に記述できる仕様で、かつXMLで記述するので、概念の理解に時間かかった?
→関数であればCallに対して戻り値が返るという暗黙のルールがあるが、WSDLではこれすらも最初から定義する必要がある。
→SOAP-RPCの場合、Call(リクエスト)と戻り値(レスポンス)の2メッセージがあると考える。(message要素)
→抽象的な仕様を「message,portType」で定義し、実際にどのような仕組み(プロトコルなど)でサービスを提供するのかを「binding,service」で定義する。
→定義が入れ子になっているので複雑だが、入れ子部分は「impl:hogehoge」となっているので「impl:」をキーにつながりを見るとわかりやすいかも。。。

definitions要素
+types要素:データ型の定義
+message要素:リクエスタ/プロバイダ間でやり取りされるSOAPメッセージの外枠?だけ定義
  →SOAP-RPCの場合、「RPCのリクエスト(doServiceRequest)とレスポンス(doServiceResponse)の2メッセージがあります」という程度
+portType要素:メッセージのつながりを定義する。
  +operation要素
  →ポートという概念上にメッセージのつながりを定義する。
  →SOAP-RPCの場合、「input要素がdoServiceRequest、output要素がdoServiceResponse で、つまり双方向型のポートです」という程度
+binding要素
  →ポートで使うプロトコルを定義する。
  →SOAP-RPCの場合、「SOAP over HTTP上で、SOAP-RPCを使う」という感じ
+service要素
  +port要素
  →サービス提供するURLを定義する。

バインディング拡張

サービスの物理接続面?(プロトコルなど)は、binding要素で定義する。
bindingの方法には以下がある。

  • SOAP over HTTP バインディング拡張
  • HTTP GET/POST バインディング拡張
  • MIME バインディング拡張

参考

図解標準 最新Webサービス マスタリングハンドブック―XML、SOAP、WSDL、UDDIの基本から開発まで
出版社: 秀和システム ; ISBN: 4798007064 ; (2004/02)

リンク集

JavaでHelloWorld SOAP編
http://www.hellohiro.com/soap.htm

最終更新時間:2005年02月14日 18時12分44秒