トップ 一覧 検索 ヘルプ RSS ログイン

Webサービスの変更点

+{{category 基礎技術}}
+{{outline}}
+
+!!!用語
+
+!!Webサービス
+*OS/言語に依存しない部品を提供するサービス
+*自己完結した疎結合なビジネスロジックをWeb上に展開したもの
+*クライアントプログラムのプラットフォームや開発言語に関係なく利用可能
+*かなり曖昧な言葉で時と場合によって解釈がことなる。
+*Webサービスの3者モデル
+**プロバイダ、ブローカ、リクエスタ
+**WSDL、SOAP、UDDI
+
+!!WSDL(Web Services Description Language)
+*Webサービスの仕様記述言語
+*XMLベース
+
+!!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仕様
+*http://www.w3.org/TR/SOAP/
+*http://www.research.ibm.com/trl/projects/xml/SOAP1.1-j-ibm-revision2.html(日本語訳)
+
+!!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
+
+*http://www.javadeveloper.jp/members/regular/Rensai.category_rensai_article_j2ee_issue_10_page_0.dhtml