2

I have JSON-RPC2 server which provides interface to some services

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

I am wondering, if there is any (preferably PHP) client, which is able to call the methods of these services, as I need it for debug purposes.

I tested one client, which is able to call methods directly:

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

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

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

My original client is CoffeScript application, which calls the methods in this way:

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

Is there any JSON-RPC2 client for PHP which I could use in the same way?

4

1 回答 1

3

JSON-RPC 是一个非常简单的协议。端点的命名空间是FLAT。没有从单个端点公开的类(更不用说多个类)。

当 CoffeeScript 客户端调用service1.giveMeSomeData时,它实际上是在要求 PHP Web 服务执行一个名为 的端点方法service1.giveMeSomeData。如果您的网络服务然后将其路由到giveMeSomeData当前分配给该实例的某个类的实例中的方法,Service1那就由它决定!(PHP 服务端)。这不是JSON-RPC 的特性,它是由您使用的端点路由器组成的。

PHP 客户端上的等效调用可能类似于$client->call('Service1.giveMeSomeData', array('name')) 它取决于您使用的 JSON-RPC 库。一些 PHP 客户端库构建了一个 ad-hoc 类的实例,该类实现了 PHP__call方法,因此任何无法识别的方法名称都被重定向为对该类中通用 RPC 调用方法的调用。

需要明确的是,JSON-RPC 端点没有提供多个命名空间,只有一个平面命名空间可以包含名称中带有.(点)字符的方法。您的 Web 服务端点如何将这些调用路由到 PHP 函数/方法完全取决于您/它。

PS。如果您解释您在 PHP 中为 JSON-RPC 使用的客户端和服务器库(有很多,质量和完整性各不相同),您将获得更好的帮助。

于 2013-08-01T00:05:17.630 回答