用于PHP的JSON-RPC 2客户端能够在嵌套类中调用方法

时间:2013-07-31 14:55:55

标签: php json-rpc

我有JSON-RPC2服务器,它提供某些服务的接口

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

我想知道,如果有任何(最好是PHP)客户端,它能够调用这些服务的方法,因为我需要它用于调试目的。

我测试了一个客户端,它可以直接调用方法:

$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客户端?

1 个答案:

答案 0 :(得分:3)

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

当CoffeeScript客户端调用service1.giveMeSomeData时,它实际上要求PHP Web服务执行名为service1.giveMeSomeData的端点方法。如果您的Web服务然后将其路由到当前分配给实例giveMeSomeData的某个类的实例中的Service1方法,那么这取决于它! (PHP服务方面)。这是 NOT JSON-RPC的一个功能,它是由你正在使用的终端路由器组成的。

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

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

PS。如果你解释一下客户端和客户端,你会得到更好的帮助。您在PHP中用于JSON-RPC的服务器库(许多,具有不同的质量和完整性)。