2

一部のサービスへのインターフェースを提供するJSON-RPC2サーバーがあります

$server = new Server;
$server->service1 = new Service1($this);
$server->service2 = new Service2($this);

デバッグ目的で必要なため、これらのサービスのメソッドを呼び出すことができる (できれば PHP) クライアントがあるかどうか疑問に思っています。

メソッドを直接呼び出すことができる 1 つのクライアントをテストしました。

$client = new jsonRPCClient('http://localhost/jsonrpcphp/server.php');

// This works
$response = $client->giveMeSomeData('name');

// This doesn't
$response = $client->service1->giveMeSomeData('name');

私の元のクライアントは CoffeScript アプリケーションで、次の方法でメソッドを呼び出します。

@get("api").call "service1.giveMeSomeData", "name", (result) =>

同じ方法で使用できる PHP 用の JSON-RPC2 クライアントはありますか?

4

1 に答える 1

3

JSON-RPC は非常に単純なプロトコルです。エンドポイントの名前空間はFLATです。単一のエンドポイントから (複数のクラスは言うまでもなく) 公開されるクラスはありません。

CoffeeScript クライアントが を呼び出しているとき、service1.giveMeSomeData文字通り PHP Web サービスに という名前のエンドポイント メソッドを実行するように要求していますservice1.giveMeSomeData。その後、Web サービスがそれを、giveMeSomeData現在 instance に割り当てられている何らかのクラスのインスタンス内のメソッドにルーティングする場合、それはお任せService1します! (PHP サービス側)。これはJSON -RPC の機能ではなく、使用しているエンドポイント ルーターによって構成されるものです。

PHP クライアント側での同等の呼び出しは、 使用する JSON-RPC ライブラリによって異なります$client->call('Service1.giveMeSomeData', array('name'))一部の PHP クライアント ライブラリは、PHP メソッドを実装するアドホック クラスのインスタンスを構築し、__call認識されないメソッド名がそのクラスの汎用 RPC 呼び出しメソッドへの呼び出しとしてリダイレクトされるようにします。

明確にするために、JSON-RPC エンドポイントから提供される複数の名前空間はありません。名前に(ドット) 文字を含むメソッドを含めることができる単一のフラットな名前空間だけです。Web サービス エンドポイントがこれらの呼び出しを PHP 関数/メソッドにルーティングする方法は、完全にあなた次第です。.

PS。JSON-RPC 用に PHP で使用しているクライアント ライブラリとサーバー ライブラリを説明すると、より適切なヘルプが得られます (さまざまな品質と完全性を持つが多数あります)。

于 2013-08-01T00:05:17.630 に答える