PHP-PHP間のSOAPによる通信

松本 義秀,三木 光範,廣安 知之

ISDL Report   No. 20020606013

2002年 10月 16日

Abstract

Webサービスとは,インターネット上に存在する様々なコンポーネントやオブジェクトを結びつけることで,ソリューションを提供しようというものである.このWebサービスの中心となる技術には,SOAP,WSDL,UDDIなどが存在する.ここではそのうちのSOAPを用いることにより,異なる言語で書かれたアプリケーション間の通信を行い,最終的には我々の目標とするシステムにおけるマッチング処理を実装しようということを目標とした.

1  はじめに

現在我々の目標としている「バーコードを用いない商品管理システム」では,クライアント−サーバ間の通信にはPHPを用いており,またどの商品が売れたかを判別するマッチングという処理はC言語を使って書かれている.そこで必要となるのがPHPとC言語で書かれたマッチング処理とのデータ通信であるが,現時点では,CSVファイルを仲介してデータのやり取りを行っている.しかしこの方法では,どのタイミングでCSVファイルが出力されたのかをお互いに知ることができないため,人間の手間が増えてしまうという問題点があった.そこで今回は,SOAPを用いて通信を行うことで,マッチング処理の自動化を行い,システムに実装しようと試みた.

 

2  SOAP

2.1  SOAPの概念

SOAP(Simple Object Access Protocol)とは,XMLをベースとしたメッセージ交換のためのプロトコル仕様であり,単純にオブジェクトへアクセスするためのプロトコルである.

今までのオブジェクト間の連携は,同一アーキテクチャの中での参照や呼び出しには非常に有効でああったが,インターネットがアプリケーションの内部にまで浸透し,1つのアーキテクチャ内で閉じられた世界だけでは解決できないソリューションというものが顕在化してきた.そこで開発されたのがこのSOAPである.このSOAPを用いることで,開発者はXMLメッセージの交換を意識することなく,アプリケーションの開発を行い,システム間連携を実現することが可能になる.

SOAPは,HTTPやSMTPのプロトコルの上位に位置し,下位のプロトコルには非依存であり,どんなプロトコルであってもSOAPメッセージを送受信,解釈できれば,問題ないとされている.したがって一般にはHTTPが最も利用されると考えられるが,SMTPやFTPに乗せることも可能である.

 

2.1  SOAPによる通信の仕組み

SOAPが,単純にXML文書をHTTPなどで送るのと最も違う点は,XML文書に対してSOAPエンベロープと呼ばれる付加情報を追加できる点である.これによってオブジェクトへのあて先,あるいは必要に応じてメッセージIDなどの付帯情報を自由に付加できる.SOAPエンベロープの構造は,Fig:1 に示すようなものになっている.

Figure 1: バーコードを用いない商品管理システムの流れ

では次に,どのようにしてメッセージ交換を実現しているか,仕組みをFig:2に示す.
まずクライアントとなる環境では,オブジェクトの呼び出しとして,オブジェクトが提供されているサイトに対しSOAPメッセージを送信する.サーバ側ではメッセージを受信すると,そのSOAPメッセージを解釈し,どのオブジェクトにマッピングするかを判断し,その上で実行結果をXMLとして生成し,クライアント側へと送信する.

Figure 2: SOAPを用いた通信の概念図

この通信の際にそれぞれのサイトでは,SOAPメッセージを生成するエンジンと,それを解釈するためのエンジンが必要になる.

 

3  SOAPの実装

前述の通り,現段階では我々のシステムはCSVファイルを介してデータのやり取りを行っている.そこでマッチング処理の自動化を図るためにはPHPをクライアントとしてC言語で書かれたマッチング関数を呼び出す必要があるが,まずはテストとしてPHPから,ランダムに商品IDを出力するPHPスクリプトを呼び出すことを目標とした.

上述のように,SOAPを用いて通信を行う場合には,SOAPメッセージを生成するエンジンとそれを解釈するエンジンが必要になるが,PHPで主に使われているSOAPライブラリとしてPHPSOAPとPEARという2種類があった.初めにPHPSOAPをインストールしようとしたが,Configを行ってもmakeファイルができず,調べても原因が分からなかったのでPEARをインストールした.

現在までに,PHP-PHP間でのSOAPによる通信ができるようになった.SOAPによるPHP関数の呼び出しを行っているソースを以下に示す.クライアント側のソースがFig:3,サーバ側のソースがFig:4である.

 

Figure 3: SOAPを用いた通信のためのスクリプト例(クライアント側)

Figure 4: SOAPを用いた通信のためのスクリプト例(サーバ側)

 

今後はC言語においてのSOAP生成,解釈エンジンについて調査し,実際にシステムに簡単なマッチングを組み込むことを目標にする.

 

4  今後の課題

  1. C言語においてのSOAPエンジンの調査
  2. マッチング処理のSOAPによる実装

Reference

[1]
日本PHPユーザ会ML http://ns1.php.gr.jp/ml.html

[2]
PHP: Hypertext Preprocessor http://www.php.net/

[3]
SOAPの正体、その目論見(前編) http://www.atmarkit.co.jp/fxml/tanpatsu/02soap/soap01.html

[4]
SOAPの正体、その目論見(後編) http://www.atmarkit.co.jp/fxml/tanpatsu/02soap/soap02.html

[5]
SOAPの仕掛けはどうなっている? http://www.atmarkit.co.jp/fxml/rensai/soap01/soap01.html


Copyright (C) 2002 Tomoyuki Hiroyasu, All rights reserved.
Copyright (C) 2002 Mitsunori Miki, All rights reserved.
Copyright (C) 2002 Yoshihide Matsumoto, All rights reserved.

No part of this document may be reproduced, copied, distributed,
transferred, modified, or transmitted, in any form or by any means,
without the prior written permission of the authors.
In no event shall the authors be liable for any damages caused in any way
out of the use of this document.

Back to Top