ホームページ  >  記事  >  バックエンド開発  >  XML-RPC を使用して WebService_PHP を構築するチュートリアル

XML-RPC を使用して WebService_PHP を構築するチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:59:39796ブラウズ

【Webサービス紹介】

Web サービスは、異種システムの通信のために作成されました。その基本的な考え方は、XML ベースの HTTP リモート呼び出しを使用して標準メカニズムを提供し、新しいプロトコルを確立する必要をなくすことです。現在、Web サービス通信には 2 つのプロトコル標準があり、1 つは XML-RPC、もう 1 つは SOAP です。 XML-RPC は比較的単純で以前に登場しましたが、SOAP はより複雑で、主に安定性、堅牢性、セキュリティ、および複雑な対話が必要な場合に使用されます。

PHP は、XML-RPC と SOAP という 2 つのプロトコルへのアクセスを統合しており、どちらも xmlrpc 拡張機能に集中しています。また、PHP の PEAR では、PHP 4 であっても PHP 5 であっても、XML-RPC 拡張機能がデフォルトで統合されており、この拡張機能は xmlrpc 拡張機能とは何の関係もなく、XML-RPC プロトコル相互作用を独立して実装できます。は xmlrpc 拡張子ではありません。PEAR::XML-RPC 拡張子を使用することをお勧めします。

ここでは主に XML-RPC を使用して Web サービスの対話プロセスを簡単に説明します。一部の内容は PHP マニュアルから引用しています。より具体的な内容については、マニュアルを参照することをお勧めします。

[xmlrpc拡張機能をインストール]

xmlrpc php 拡張機能がシステムにインストールされていない場合は、正しくインストールしてください。

Windows プラットフォームでは、まず、PHP インストール ディレクトリにある拡張子 php_xmlrpc.dll を C:Windows または C:Winnt ディレクトリに配置します (PHP4 拡張子は C:phpextensions ディレクトリにあり、PHP5 拡張子は C:phpext ディレクトリにあります)。同時に、C:Windowsphp.ini または C:Winntphp.ini の extension=php_xmlrpc.dll の前にあるセミコロン「;」を削除し、Web サーバーを再起動して、phpinfo に XML-RPC プロジェクトがあるかどうかを確認します。 () xmlrpc 拡張機能が正しくインストールされているかどうかを確認します。

Unix/Linux プラットフォームでは、xmlrpc 拡張機能がインストールされていない場合は、PHP を再コンパイルし、設定時に --with-xmlrpc オプションを追加してから、phpinfo() をチェックして、xmlrpc が正常にインストールされているかどうかを確認してください。

(注: 以下の操作は xmlrpc 拡張の通常のインストールに基づいています。必ず正しくインストールしてください。)

[XML-RPCの動作原理]

XML-RPCとは、大まかに言うと、プロセス全体が通信にXMLを使用することを意味します。まず、RPC クライアントから渡された XML でカプセル化されたリクエストを処理する RPC サーバーが構築され、処理結果が XML 形式で RPC クライアントに返されます。その後、クライアントは XML を解析して必要なデータを取得します。

XML-RPCのサーバー側には、クライアントが呼び出すための既製の関数が用意されている必要があり、クライアントが送信したリクエスト内の関数やメソッドはサーバー側の関数やメソッドと一致していなければ、必要な結果が得られません。 。

ここで、プロセス全体を説明する簡単なコードを作成します。

【XML-RPC実践】

サーバーは、xmlrpc_server_create関数を使用してサーバーを生成し、公開する必要があるRPC呼び出しインターフェースを登録し、RPCクライアントからXMLデータのPOSTを受け取り、処理します。処理結果はクライアントにフォームで表示されます。 XMLの。

コードは次のとおりです: rpc_server.php

/**
* 関数: RPC クライアントによって呼び出されるために提供される関数
* パラメータ:
* $method はクライアントが呼び出す必要がある関数です
* $params はクライアントが呼び出す必要がある関数のパラメータ配列です
* Return: 指定された呼び出し結果を返します
*/
関数 rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get")
{
$return = 'get メソッドによるこのデータ'; }
それ以外
{
$return = 'メソッドまたはパラメータを指定しない';
}
リターン $リターン
}

//XML-RPC サーバー側を生成します

$xmlrpc_server = xmlrpc_server_create();

//サーバーによって呼び出されるメソッド rpc_server を登録します。これは実際には rpc_server_func 関数を指します

xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");

//クライアントからの XML データ POST を受け入れる

$request = $HTTP_RAW_POST_DATA;

//クライアントを呼び出してXMLリクエストを実行し、実行結果を取得します

$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);

//関数処理後の結果XMLを出力

header('Content-Type: text/xml'); echo $xmlrpc_response;

//XML-RPC サーバー側リソースを破棄します

xmlrpc_server_destroy($xmlrpc_server); ?>


サーバー側が構築できたら、RPCクライアントを構築しましょう。クライアントは、大まかに Socket を介して XML-RPC サーバーのポート 80 にアクセスし、呼び出す必要がある RPC インターフェイスを XML にカプセル化し、POST リクエストを通じて RPC サーバーに送信し、最終的にサーバーから返される結果を取得します。

コードは次のとおりです: rpc_client.php

/**

※機能:XML-RPCサーバーに接続するためにクライアントに提供される機能

* パラメータ:
* $host 接続する必要があるホスト
* $port ホストに接続するポート
* $rpc_server XML-RPC サーバー側ファイル
* $request カプセル化された XML リクエスト情報
* 戻り値: 接続が成功した場合は、サーバーから返された XML 情報が返されます。失敗した場合は、false が返されます。*/
関数 rpc_client_call($host, $port, $rpc_server, $request) {

file://指定したサーバーを開きます
$fp = fsockopen($host, $port);

file://通信する必要があるXML-RPCサーバーのクエリPOSTリクエスト情報を構築します
$query = "POST $rpc_server HTTP/1.0 User_Agent: XML-RPC クライアント ホスト: ".$host." Content-Type: text/xml Content-Length: ".strlen($request)." ".$request." ";

file:// は構築された HTTP プロトコルをサーバーに送信し、失敗した場合は false を返します
if (!fputs($fp, $query, strlen($query)))
{
$errstr = "書き込みエラー"; false を返します。 }

// HTTP ヘッダーや XML 情報など、サーバーから返されたすべての情報を取得します
$contents = ''; その間 (!feof($fp))
{
$contents .= fgets($fp); }

//接続リソースを閉じた後、取得したコンテンツを返します
fclose($fp); $content を返す
}

//RPCサーバーに接続するための情報を構築します
$host = 'ローカルホスト'; $ポート = 80; $rpc_server = '/~heiyeluren/rpc_server.php';

//送信する必要がある XML リクエストを XML にエンコードします。呼び出す必要があるメソッドは rpc_server で、パラメータは get

です。 $request = xmlrpc_encode_request('rpc_server', 'get');


//rpc_client_call 関数を呼び出して、すべてのリクエストを XML-RPC サーバーに送信し、情報を取得します
$response = rpc_client_call($host, $port, $rpc_server, $request);

//サーバーから返された XML を分析し、HTTP ヘッダー情報を削除し、XML を PHP が認識できる文字列に変換します


$split = '';

$xml =explode($split, $response);

$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);

//RPCサーバーから取得した情報を出力します
print_r($response);

?>

大まかに言えば、上記の例は rpc_server というメソッドを送信し、パラメーターは get であり、サーバーから返される XML データは次のとおりです。


<メソッド応答>

get メソッドによるこのデータ





次に、この XML を xmlrpc_decode 関数を通じて PHP 文字列にエンコードし、それを自由に処理できるようになり、Web サービスの対話全体が完了します。


【結論】

XML-RPCでもSOAPでも、安定かつ安全にリモートプロセス呼び出しができてプロジェクトを完了できれば、Webサービス全体は成功します。さらに、可能であれば、PEAR で XML-RPC を使用して上記と同様の操作を実装することもできます。そのほうが簡単で適切な場合があります。

Web サービスの対話には XML-RPC を使用するだけです。コードの一部については、PHP マニュアルを参照することをお勧めします。記事が間違っている場合は、修正してください。

http://www.bkjia.com/PHPjc/631895.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/631895.html技術記事 [Web サービスの概要] Web サービスは、異種システムの通信のために作成されます。その基本的な考え方は、XML ベースの HTTP リモート呼び出しを使用して標準メカニズムを提供し、構築する必要性を排除することです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。