CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/08/04 14:00
目次

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開発の世界におけるこの言語の有用性と価値を回復させる結果になっています。

参考資料



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

著者プロフィール

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

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

  • Vlad Kofman(Vlad Kofman)

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5