特集:第1回 スタートアップ.NET――基礎から始める.NETdev .NET(2/8 ページ)

» 2004年07月01日 00時00分 公開
[大澤文孝,ITmedia]

データのやり取りを行う「XML Webサービス」

 .NETでは、データがネットワークを流れて、さまざまなクライアントやサーバに渡ることを想定している。ここでいうネットワークは、社内LANだけでなくインターネットも含む。インターネットでは、セキュリティ上、ファイアウォールが構成されていることが多く、どことでも接続するためには、データのやり取りに、ファイアウォールを通しやすいプロトコルを採用する必要がある。また、クライアントやサーバは、WindowsではないOSである可能性もある。そのため、汎用性も求められる。

 そこで.NETでは、「データをやり取りするプログラム」として、「XML Webサービス」と呼ぶ規格を採用している。XML Webサービスは、次の特徴を持つ。

1. HTTPでの通信

 データは、HTTP(Hpyer Text Transfer Protocol)で通信する。HTTPは、Webで使われているのと同じプロトコル。現在、インターネットを使っていて、「Webを見られない」という環境はほとんどないはずだ。つまり、ほとんどの環境ではファイアウォールでHTTPを透過する設定がされており、HTTPを採用しているXML Webサービスは、ファイアウォールを通しやすいといえる。

 また、プロトコルにHTTPを採用することで、Webアプリケーションの構成に使われているさまざまな技術を流用できるというメリットもある。

 たとえば、ユーザー認証やSSL(Secure Socket Layer)による暗号化、そして、アクセスログの記録や集計などに、Webアプリケーションと同じ仕組みを利用できる。実際のところ、XML Webサービスは、図2に示すように、Webサーバ上で実行され、XML形式のデータを返す、一種のWebアプリケーションである。

2. SOAPによるデータの表現

 Windows以外のOSとの連携を考えた場合には、やり取りするデータをどのように表現するかが問題となる。そこで、XML Webサービスでは、「SOAP」(Simple Object Access Protocol)と呼ばれる仕様に則ったデータ形式で行う。

 SOAPとは、簡単にいえば「Webを利用して、リモートのプログラムを呼び出す仕組み」のことである。リモートのプログラムを呼び出す際に引き渡す値や、プログラムから戻ってくる値は、XMLでタグ付けされる(リスト1、リスト2)。

 もちろん、リモートのプログラムを呼び出す時には、そのリモートのプログラムが、どのような値を受け取り、どのような値を返すのかという情報が必要だ。その情報もXML形式で書かれており、「WSDL(Web Services Description Language)」と呼ばれる(リスト3)。SOAPの仕様は、W3Cによって標準化されており、OS依存しない。そのため、SOAPで表現されているXML Webサービスは、どのようなOSからでも呼び出せる。

 リスト2に示したように、XML Webサービスから戻ってきた値は、XMLでタグ付けされた構成なので、データを受け取ったアプリケーションは、データ加工しやすいのもメリットのひとつだ。たとえば、XMLでは、XML形式のデータを他の形式のデータに変換するために、「XSLT」と呼ぶ仕様がある。XSLTを使うと、XML形式のデータをHTML形式など、他の形式に容易に変換できる。

図2■XML Webサービス
リスト1■XML Webサービスへのデータの送信例(2つの数値の和を返すWebサービスの例)

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ValueAdd xmlns="http://tempuri.org/">
      <a>10 </a>    <!-- 引き渡す値-->
      <b>20</b>    <!-- 引き渡す値-->
    </ValueAdd>
  </soap:Body>
</soap:Envelope>

リスト2■XML Webサービスからの応答例(2つの数値の和を返すWebサービスの例)
<?xml version="1.0" encoding="utf-8" ?>
<int xmlns="http://tempuri.org/">30</int> <!-- 実行結果(10 + 20 = 30) -->

リスト3■WSDLの例

<?xml version="1.0" encoding="utf-8" ?> 
<definitions 
…中略…
>
<types>
  <s:schema elementFormDefault="qualified"
     targetNamespace="http://tempuri.org/">
    <s:element name="ValueAdd">
      <s:complexType>
        <s:sequence>
          <s:element minOccurs="1" maxOccurs="1" 
              name="a" type="s:int"
              /> <!-- 整数aをとるという意味 -->
          <s:element minOccurs="1" maxOccurs="1"
              name="b" type="s:int"
              /> <!-- 整数bをとるという意味 -->
        </s:sequence>
      </s:complexType>
    </s:element>
    <s:element name="ValueAddResponse">
      <s:complexType>
        <s:sequence>
          <s:element minOccurs="1" maxOccurs="1" 
             name="ValueAddResult" type="s:int"
           /> <!-- 結果に整数を返すという意味 -->
        </s:sequence>
      </s:complexType>
    </s:element>
  </s:schema>
</types>
…中略…
</definitions>

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ