SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

PHP 5でSOAPおよびRPC Webサービスを開発する

PHPでWebサービスを作成および利用する2つの標準的な方法

XML-RPC PHP Webサービスの作成

XML-RPCサーバコード

 RPCの場合、WSDLファイルを作成する必要はありません。サーバの作成と実行するメソッド(呼び出し)の登録のみ必要です。

$server = xmlrpc_server_create();
xmlrpc_server_register_method($server, 'math.add', array('Math', 'add'));

 このケースでは、「add」メソッドを実行する「Math」オブジェクトが呼び出されます。

<?php
/**
 * Math methods
 */
class Math
{
    /**
     * Return the sum of all values in an array
     * 
     * @param array $values An array of values to sum
     * @return int
     */
    public static function add($method, $params)
    {
       return array_sum($params[0]);
    }
}

$server = xmlrpc_server_create();
xmlrpc_server_register_method($server, 'math.add', array('Math', 'add'));
$request = file_get_contents('php://input');
$response = xmlrpc_server_call_method($server, $request, null);
header('Content-Type: text/xml');
echo $response;
?>

XML-RPCクライアントコード

 RPCクライアントは、呼び出しが行われる前にリクエストコンテキストを作成する必要があるために、SOAPクライアントよりは多少多くの働きをします。

$context = stream_context_create(array('http' => array(
      'method' => "POST",
      'header' => "Content-Type: text/xml",
      'content' => $request
  )));

 それ以外についてはSOAPクライアントと同様で、レスポンスが処理され、表示されます。

 ソース全体を次に示します。

<?php

try
{ 
  $requestArr = array(1,2);
  $request = xmlrpc_encode_request('math.add',array($requestArr),array('encoding' => 'UTF-8')); 
  
  $context = stream_context_create(array('http' => array(
      'method' => "POST",
      'header' => "Content-Type: text/xml",
      'content' => $request
  )));
  $file = file_get_contents('http://localhost/xmlrpc-server.php', false, $context);
   
   if(!$file) {
     throw new Exception('Unable to get response from web service');
   }
   
  $response = xmlrpc_decode($file);

  echo 'XML RPC Example - adding array on the server<br>';
  echo $requestArr[0] . ' + ' . $requestArr[1] . ' = ' . $response;
}
catch (Exception $e)
{
  echo $e->getMessage();
}

?>

 SOAPクライアントと同様、このクライアントも1 + 2 = 3を表示します。このクライアントにはSOAPクライアントより多くのエラー処理が含まれていますが、これは意図的なものです。

表1:SOAP関数
メソッド 説明
SoapServer->__construct( mixed wsdl [, array options] ) SoapServerオブジェクトを作成します。wsdlパラメータは、WSDLのURIを指定します。options配列には、SOAPバージョンなどのSoapServerオプションを指定できます
SoapServer->addFunction( mixed functions ) SOAPリクエストを処理する1つまたは複数のPHP関数を追加します。単一の関数を文字列として追加できます。複数の関数を配列として追加できます
SoapServer->fault() エラーを示すSoapServerフォールト
SoapServer->getFunctions() 関数のリストを返します
SoapServer->handle() SOAPリクエストを処理し、要求された関数を呼び出し、レスポンスを送り返します
SoapServer->setClass(string class_name [, mixed args [, mixed ...]] ) SOAPリクエストを処理するクラスを設定します。指定されたクラスからすべてのメソッドをエクスポートします。argsは、既定のクラスコンストラクタによって使用されます
SoapHeader->__construct() SOAPヘッダーを作成します
SoapClient->__soapCall( string function_name, array arguments [, array options [, mixed input_headers [, array &output_headers]]] ) SOAP関数を呼び出します
SoapClient->__doRequest() SOAPリクエストを実行します
SoapClient->__getFunctions() SOAP関数のリストを返します
SoapClient->__getTypes() SOAPタイプのリストを返します

まとめ

 本稿では、PHPでWebサービスを作成および利用する2つの標準的な方法について説明しました。また、PHP WS開発用に設計された各種のサードパーティモジュールについても述べました。うれしいことにPHPは最新のすべての標準(W3C SOAP仕様など)をサポートしており、Web開発の世界におけるこの言語の有用性と価値を回復させる結果になっています。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Vlad Kofman(Vlad Kofman)

ウォールストリート有数の企業でエンタープライズレベルのプロジェクトに携わる。また、米国政府の防衛関連の仕事も手がけている。特に関心を寄せているのは、オブジェクト指向プログラミング方法論、UI、デザインパターン。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4168 2009/08/04 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー