IThaiのブログ

IT関連の話題やタイに関する様々なことを書いていきます。

SOAP、WSDL、UDDIとは何か?

f:id:kkv:20141206182459j:plain

前の記事を書いていたときも気になっていましたが、

今までSOAP技術を使ったWebサービスを実装していたときに たまに聞くWSDLとかUDDIという言葉については無知でした。 (というかSOAPも利用するだけで仕様とか理解できていない)

良い機会なので、ちょっとこれらについて簡単に調べてみます。

SOAP
Webサービスを実際に利用するためのXMLメッセージの通信規約(プロトコル)

WSDL
Webサービスの利用方法を知るための共通インターフェース言語

UDDI
Webサービスを公開し、発見させる(Webサービスを探す)ためのディレクトリサービス

これらはWebサービス同士が通信するときに必要となる手順になります。
(実際にはUDDI→WSDLSOAPの順)

UDDIでサービス仕様の記述されている場所(主にURL)を調べ、WSDLで入出力XMLメッセージフォーマットやプロトコル等の情報を知り、SOAPで(HTTP等にバインディングさせて)通信(オブジェクトの交換)を行うという流れです。

簡単にいうと、
UDDI→取引
WSDL仕様書
SOAP→実装
みたいなイメージなのかな。

普段開発をしていてSOAPしか耳に入ってこないのは、WSDLやUDDIが仕様等に関わるところで、実際に通信部分を実装するところには直接関係してこないものだったということですね。

それぞれがコンピュータに理解できるようにXML形式のフォーマットになっていますので、以下簡単にXMLフォーマットの例を見てみます。

SOAP

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:header>
    </soap-env:header>
    <soap-env:body>
    //ここにオブジェクト操作を書いていく
    </soap-env:body>
</soap-env:envelope>

WSDL

<wsdl:definitions>
    <wsdl:types>
    </wsdl:types>
    <wsdl:message>
    //SOAPメッセージのフォーマットを定義する
    </wsdl:message>
    <wsdl:portType>
    //インターフェイスのメソッドを定義する
    //パラメータの出現順序を定義する
    </wsdl:portType>
    <wsdl:binding>
    </wsdl:binding>
    <wsdl:service>
    </wsdl:service>
</wsdl:definitions>

UDDI

<businessEntity>
    <discoverURLs>
    //企業情報の取得先URL
    </discoverURLs>
    <businessService>
    //サービス情報
    </businessService>
</businessEntity>

XMLフォーマットの大枠のみを記述したので、実際には各要素には子要素があります。

まとめ
今回、UDDIからSOAPまで調べていくことで、Webサービス同士の通信ができるようになっていることがわかりました。簡単にですが、UDDI、WSDLSOAPXMLフォーマットについても調べることができましたので、次の機会に各XMLフォーマットについて詳細にみていこうと思います。