公開Webサービスのキホン(7):Webサービスを発見する仕組み〜UDDIWebサービスの基軸を構成するのは、SOAP、WSDL、UDDIの3つのテクノロジだ。この連載では、Webサービスの基本的な知識を身に付けるために、この3つのテクノロジの背景と仕様、機能などを分かりやすく解説していく。});Webサービスを登録し発見するネットワーク上に数多く存在するWebサービスを効果的に利用するためには、Webサービスを登録・公開し、検索する仕組みが必要になる。Integration)だ。UDDIは、Yahoo!やGoogleなどの検索サイトと似ている。検索サイトは入力されたキーワードから目的のWebサイトを検索するようになっている。UDDIには企業名、サービス内容、識別コード、分類などがあらかじめ登録されており、これらのデータによって精度の高い検索を行える。前述の検索サイトがHTMLによる結果を返してくるのに対し、UDDIはコンピュータが処理しやすいXMLをベースに入出力を実現しているため、コンピュータによる問い合わせ、結果分析を自動化することが容易だ。データベースとなるUDDIレジストリUDDIには、Webサービス提供者の企業名や連絡先、その企業が提供しているサービスの内容などさまざまな情報を登録しておく必要がある。その情報を登録する場所を「UDDIレジストリ」という。UDDIレジストリ図1のように、Webサービス提供者は事前にWebサービスについての情報をUDDIレジストリに登録しておく。Webサービス利用者はUDDIレジストリを検索し、目的のWebサービスを発見する。その参照先に接続し、サービスについて記述されたWSDL文書を取得し、サービスのやりとりが始まる。UDDIレジストリとやりとりするためのAPIも用意されており、それらは「UDDIプログラマAPI」と呼ばれる。通常の企業間取引では、まず条件に合う企業を探し、その企業との間で何度もやりとりを重ねた上でやっとサービスが始まる。UDDIでは、WSDL文書の取得によって技術的な情報も取得でき、検索からサービスの開始まで自動的に処理されるというわけだ。UDDIは、バージョン1.0が2000年9月に公開され、標準化団体UDDI.orgによって検討が進められてきた。バージョン3.0が2002年7月にOASISに提出され、UDDI.orgもOASISの傘下に入って現在も開発が進められている。本稿は、現時点で最新のUDDIバージョン3.0に基づいて解説することにする。UDDIレジストリがないとWebサービスを使えない?本連載第1回「Webサービスの主役、SOAP誕生の背景」で、Webサービスを「インターネットの標準技術を使ってネットワーク上に分散したアプリケーションを連携させる技術」と定義した。この意味でのWebサービスを使って、社内や取引実績のある企業など、接続相手があらかじめ特定されているアプリケーション同士を連携させることも少なくない。この場合、接続先に対してあらためてWebサービスを公開したり発見してもらったりする必要はなく、接続先に直接接続すればよい。社内や取引先など、すでに密接なつながりのある組織とWebサービスを使って接続するのであれば、UDDIレジストリを使わずに、SOAPとWSDLを静的に連携させればWebサービスを利用できる。社内や業界団体内などでも、あらかじめ決められたメンバーだけが利用できるようにWebサービスを公開したい場合がある。した目的で、アクセス権のあるユーザーだけが登録・検索を行えるUDDIレジストリを「プライベートUDDI」という。プライベートUDDIは、登録されるWebサービスをその運営者が審査し、その質や信用度を保持できるというメリットがある。利用者が限定されているプライベートUDDIに対し、Webサービスの登録や検索が誰にでも許可されているUDDIレジストリを「パブリックUDDI」(あるいは「UDDIビジネスレジストリ(UBR)」)という。Registry、そして日本のNTTコミュニケーションズによるUDDIビジネスレジトリなどが公開されている。パブリックUDDIはだれでもアクセスできるため、セキュリティを確保し、登録されるWebサービスを評価する仕組みが必要になる。パブリックUDDIには評価やセキュリティの課題があるため、近年はプライベートUDDIの重要性が高まっている。UDDIバージョン3.0では、「ルートレジストリ」という概念が新たに取り入れられ、パブリックUDDIを「ルートレジストリ」ととらえて、プライベートUDDIと連携するシナリオが紹介されている。パブリックUDDIを「ルート」、プライベートUDDIを「アフィリエイト(affiliate)」とする階層構造を形成し、レジストリ間でデータを共有できるような仕組みを提供している。UDDIのデータ構造ここからは、UDDIレジストリにはどのようなデータが登録されているのか、それをどのように操作するのか、について紹介していく。UDDIレジストリに登録されているデータは、大きく分けて5つの要素を持つ。UDDIレジストリで使われる要素UDDIレジストリには、基本的には情報は企業単位に登録され、その企業についての情報を記述するbusinessEntity要素が最上位要素になる。businessEntity要素は、Webサービスについての情報を記述するbusinessService要素を子要素に、Webサービスの技術的な情報を記述するbindingTemplate要素を孫要素に持つ。businessEntity要素とbusinessService要素は、お互いを一意に特定するためのbusinessKey属性により結び付けられており、businessService要素とbindingTemplate要素はお互いを一意に特定するためのserviceKey属性により結び付けられている。1つの企業が複数のサービスを提供していることもあるため、1つのbusinessEntity要素が複数のbusinessService要素を持つことも可能だ。これら親子関係にある3つの要素とは独立した構造として、tModel要素とpublisherAssertion要素が存在する。Model”の略で、“技術情報”という意味だ。businessEntity以下の要素とは独立した構造になっており、bindingTemplate要素から参照されるようになっている。tModelには、サービスのタイプ、つまりプロトコルやメッセージ配信方法などが記述される。ユーザーとサービス提供者の「サービスのタイプ」が同じであればやりとりすることができるというわけだ。tModelでサービスのタイプが詳細に記述されるわけではなく、その仕様書のURLが記述されているにすぎない。UDDIでは、多種多様なサービス・タイプを記述する文書を参照するという方式を取っている。publisherAssertion要素は、fromKey要素やtoKey要素によって企業間の関係を表現する。この情報によりユーザーは目的の企業だけでなくその関連企業を見つけることができる。旅行会社を検索するときには、JTBとJTB関連の信頼できる関連企業を見つけられる。UDDIは企業の信頼性を保証する仕組みは持たないが、信頼できる企業の関連企業の中から目的の企業を選ぶ、といったことができる。関連企業間でサービスを共有することで、単独で登録するよりも高いヒットを獲得することができるという、サービス提供者側のメリットも表現できる。businessEntity要素、businessService要素、tModel要素の下位のkeyedReference要素には、製品分類や産業分類などの分類情報や識別情報が格納されており、分類や識別コードによる検索が可能だ。コードなど複数の検索項目を指定して精度の高い検索を行える。簡単にそれぞれの要素のデータを紹介しよう(本稿のリストでは、簡略化のため名前空間を一部省略してある)。businessEntityデータbusinessEntity要素には、企業名、企業についての説明、連絡先などのビジネス情報が格納されるbusinessEntity要素の子要素に、businessServices要素がある。businessServiceデータbusinessService要素には、サービス名やサービスについての説明などの情報が格納される。1つの企業が複数のサービスを提供する場合もあり、businessServices要素は複数のbusinessService要素を子要素として持つことができるbusinessServices要素の子要素にbindingTemplate要素がある。bindingTemplateデータbindingTemplate要素には、サービスに接続するためのアドレス、そのタイプ、説明などの技術情報が格納される。bindingTemplateデータの中のtModelInstanceDetails要素の部分に、下記のようなtModel要素への参照情報が組み込まれる。tModelデータtModel要素には、Webサービスのタイプや仕様のURLなどの技術情報が格納されるpublisherAssertion要素では、fromKey要素とtoKey要素を使って2社の関係を定義する。(body)部分に組み込まれてやりとりされる。UDDIプログラマAPIは以下の6つからなる。●発行API情報の登録や削除、ユーザー認証を行うためのAPI●照会API情報の検索や詳細情報の取得を行うためのAPI●セキュリティ方針API認証トークンに関するAPI●管理および所有権移動APIbusinessEntityまたはtModel構造の管理や所有権を移動するためのAPI●サブスクリプションAPIUDDIレジストリに加えられた変更を通知するためのAPI●値セットAPI登録時に呼び出されたkeyedReferenceの値が有効かどうかを検査するためのAPIそれぞれのAPIセットには以下のAPIが含まれている。ユーザー認証を行う際にUDDIビジネスレジストリに送信するデータは次のようになる。ユーザー認証時の送信データsoapenv:Body要素の内容に、UDDIプログラマAPIが記述されている7回にわたって、Webサービスを支える3つの中核技術、SOAP、WSDL、UDDIについて解説してきた。Webサービスは、これら3つの技術を柱に、メッセージ技術やセキュリティ技術などさまざまな技術を包含する複合的な技術だ。策定中の仕様も多いとはいえ、いまやWebサービスは現実のソリューションとして実装されつつある。仕様の標準化や実装動向に注目するとともに、仕様策定の背景や基本的な考えをしっかりと理解しておきたい。(「Webサービスのキホン」は今回が最終回です。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。