ホームページ  >  記事  >  php教程  >  XML テクノロジーを使用して PHP でリモート サービスを構築する (パート 2)

XML テクノロジーを使用して PHP でリモート サービスを構築する (パート 2)

WBOY
WBOYオリジナル
2016-06-21 09:09:371005ブラウズ

xml|リモートサービス

4. XML_RPC に基づく Web サービス サービスの構築と使用には XML_RPC を使用すると非常に便利です。企業は、自社が提供するさまざまなサービスのために XML_RPC サーバーを展開し、ユーザー、クライアント ソフトウェア、およびクライアント企業はこのサービスを使用して、エンド ユーザー向けのハイエンド サービスやアプリケーションを構築できます。より効果的で、安価で、高品質なサービスを提供するためのこの競争により、アプリケーション サービスの品質が大幅に向上します。

しかし、Web 上でサービスをカタログ化、インデックス付け、検索する方法など、解決すべき問題がまだいくつかあります。 UDDI はこの問題の解決を試みていますが、標準は単純ではなく、それに対する業界の対応も不透明です。ただし、XML_RPC を企業内に適用すると、コードの再利用性が向上するだけでなく、今後数年間で重要な知識の宝となる新しい分散コンピューティング モデルがもたらされます。 XML_RPC の開発は、分散コンピューティングの問題を解決することから始まり、サービス Web の基本レベルとなり、非常に良いスタートを切りました。この標準に対する人々の熱意は確実に続くでしょう。ここでは、XML_RPC の実際の応用を見てみましょう。

4.1 PHP で XML_RPC を適用する
PHP は、Web サービスを提供するのに理想的な言語です。 PHP コードを記述して適切な場所に配置するだけで、URL を通じて「呼び出す」ことができるサービスがすぐに作成されます。 PHP での XML_RPC 実装は複雑な場合もあれば単純な場合もありますが、多くのオプションがあります。ここでは、Useful Information Company の XML_RPC 実装を選択します。そのコードとドキュメントは http://xmlrpc.usefulinc.com/ からダウンロードできます。

この XML_RPC 実装の基本クラスには 2 つのファイルが含まれます:

xmlrpc.inc: XML_RPC の php クライアントに必要なクラスが含まれます

xmlrpcs.inc: XML_RPC の php サーバーに必要なクラスが含まれます

4.2 クライアント
XML_RPC クライアントの作成とは、次のことを意味します:

1. XML_RPC リクエスト メッセージを作成する

2. XML_RPC パラメーターを設定する

3. XML_RPC メッセージを作成する

4. メッセージを送信する

5. 応答を取得する

6. 解釈する応答

次の例を参照してください:


<?php$f=new xmlrpcmsg('examples.getStateName',array(new xmlrpcval(14, "int")));
$c=new xmlrpc_client( "/RPC2 ", "betty.userland.com", 80);
$r=$c->send($f);
$v=$r->value();
if (!$r ->faultCode()) {
print "ステータスコード" . $HTTP_POST_VARS["stateno"] .
$v->scalarval() "


はサーバーのResponse<BR><PRE>" .<br>htmlentities($r->serialize()). "</PRE><HR>n";
} else {
print "エラー: ";
print "コード: " . $r->faultCode() .
" 理由: '" .$r->faultString()."'
";
}
?>


この例では、まず、 create 「examples.getStateName」メソッドを呼び出し、値が 14 の「int」型の整数パラメータを渡す XML_RPC メッセージ。次に、呼び出される URL (パス、ドメイン、ポート) を記述するクライアントを作成します。次に、メッセージを送信し、応答オブジェクトを受信して​​、エラーをチェックしました。エラーがなければ結果を表示します。

RPC クライアント プログラムを作成するときに使用される主な関数は次のとおりです:

クライアントを作成するには:


$client=new xmlrpc_client($server_path, $server_hostname, $server_port);
メッセージの送信方法は次のとおりです。

$response=$client->send($xmlrpc_message);
xmlrpcresp のインスタンスを返します。渡すメッセージは、次のメソッドで作成された xmlrpcmsg のインスタンスです:

$msg=new xmlrpcmsg($methodName, $parameterArray);
methodName は呼び出されるメソッド (プロセス) の名前です。 parameterArray は、xmlrpcval オブジェクトの PHP 配列です。例:

$msg=new xmlrpcmsg("examples.getStateName", array(new xmlrpcval(23, "int")));
xmlrpcval オブジェクトは次の形式で作成できます:

<?php
$myVal =new xmlrpcval($stringVal);$myVal=new xmlrpcval($scalarVal, "int" | "boolean" | "string" | "double" | "dateTime.iso8601" | "base64");
$ myVal=new xmlrpcval($arrayVal, "array" | "struct");
?>


最初の形式では、xmlrpc 文字列値を作成します。 2 番目の形式は、値と型を説明する値を作成します。 3 番目の形式は、配列のような構造で他の xmlrpc 値を結合することにより、複雑なオブジェクトを作成します。例:


<?php
$myArray=new xmlrpcval(array(new xmlrpcval("Tom"), new xmlrpcval("ディック"),new xmlrpcval("ハリー")), "配列");$myStruct=new xmlrpcval(array(
"名前" => 新しい xmlrpcval("トム"),
"年齢" => 新しいxmlrpcval(34, "int"),
"geek" => new xmlrpcval(1, "boolean")),"struct");
?>


応答オブジェクトは xmlrpcresp 型で、クライアント オブジェクトの send メソッドを呼び出すことによって取得されます。サーバー側では、次のように xmlrpcresp 型のオブジェクトを作成できます:

$resp=new xmlrpcresp($xmlrpcval);
そしてクライアント側では、次のメソッドを使用して応答から xmlrpcval を取得します:

$xmlrpcVal= $resp->value();
次に、次のメソッドを使用して、応答結果を記述する PHP 変数を取得できます。複合データ型の場合、非常に便利な関数が 2 つあり、どちらも xmlrpc.inc にあります:

$arr=xmlrpc_decode($xmlrpc_val);
この関数は、xmlrpcval 変数 $xmlrpc_val を含む PHP 配列を返します。データはPHP自体が持つ変数型に変換されています。

$xmlrpc_val=xmlrpc_encode($phpval);
この関数は、$phpval で記述された PHP データを含む xmlrpcval 型の値を返します。配列と構造体の場合、このメソッドにより再帰的分析が可能になります。非基本データ型 (base-64 データや日付時刻データなど) はサポートされていないことに注意してください。

4.3 サーバーサイド xmlrpcs.inc が提供するクラス作成サービスを使用するのは非常に簡単です。サービスを作成するには、次のように xmlrpc_server のインスタンスを作成します:

<?php
$s=new xmlrpc_server( array("examples.myFunc" =>
array("function" => "foo") ));
?>
xmlrpc_server コンストラクターに渡されるのは、連想配列の連想配列です。プロシージャ「examples.myFunc」は「foo」関数を呼び出します。このため、foo はメソッド ハンドルと呼ばれます。

メソッドハンドルの記述は簡単です。メソッド ハンドルのスケルトンは次のとおりです:

<?php
function foo ($params) {
global $xmlrpcerruser; //ユーザー エラー コード値の導入
//$params は xmlrpcval オブジェクトの配列です
if ($ err ) {// エラー条件
return new xmlrpcresp(0, $xmlrpcerruser+1, // ユーザーエラー 1
"エラー!");
} else {
// 成功
return new xmlrpcresp(new xmlrpcval("Fine ! ", "string"));
}
}
?>


プログラムがエラーをチェックし、エラーがある場合はエラーを返します ($xmlrpcerruser+1 から開始します)。正常であれば、操作の成功情報の説明 xmlrpcresp を返します。


5. アプリケーション例

次の例では、サービスを構築します。指定された値 n に対して、サービスは n*2 を返します。クライアントはこのサービスを使用して 5*2 の値を計算します。

サーバー側のコードは次のとおりです:
<?php
include("xmlrpc.inc");
include("xmlrpcs.inc");
function foo ($params)
{global $xmlrpcerruser ; // はじめに ユーザーエラーコード値
// $params は xmlrpcval オブジェクトの配列です
$vala=$params->params[0];
$sval=$vala->scalarval();
$ret= $sval*2 ;
return new xmlrpcresp(new xmlrpcval($ret, "int"));
}
$s=new xmlrpc_server( array("product" =>
array("function" =>"foo) "))) ;
?>


クライアントコードは次のとおりです:


<?php
include("xmlrpc.inc");
if ($HTTP_POST_VARS["number"]!="") {
$f=new xmlrpcmsg ('product',array(new xmlrpcval($HTTP_POST_VARS["number"], "int")));
$c=new xmlrpc_client("/xmlrpc/servfoo.php", "luigi. melpomenia.com.ar" , 80);$c->setDebug(0);
$r=$c->send($f);
$v=$r->value();
if (!$r- >faultCode()) {
print "Number ". $HTTP_POST_VARS["number"] . " は " .
$v->scalarval() ";
print "
サーバーからの結果!
" .<br>htmlentities($r->serialize()). "

n";
} else {
print "操作が失敗しました: " ;
print "コード: " . $r->faultCode() .
" 理由: '" .$r->faultString()."'<BR>";
}
}
print "<フォームメソッド="POST">
<INPUT NAME="number" VALUE="${number}">
<input type="submit" value="go" name="submit"></FORM><P>
Enter a value";
?>


結論: XML_RPC サービスの操作には、分散プロセスのカタログ作成とインデックス作成メカニズム、プログラミング言語で XML_RPC を処理するためのより良いインターフェイスなど、他の多くのインフラストラクチャと基本的な作業も含まれます。 XML_RPC と Serviced Web に関するレポートは数多くあります。その発展に注目してみましょう。





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。