用于 PHP 的 JSON-RPC 2 客户端能够调用嵌套类中的方法
Posted
技术标签:
【中文标题】用于 PHP 的 JSON-RPC 2 客户端能够调用嵌套类中的方法【英文标题】:JSON-RPC 2 client for PHP able to call methods in nested classes 【发布时间】:2013-07-31 14:55:54 【问题描述】:我有 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】:JSON-RPC 是一个非常简单的协议。端点的命名空间是FLAT。没有从单个端点公开的类(更不用说多个类了)。
当 CoffeeScript 客户端调用 service1.giveMeSomeData
时,它实际上是在要求 PHP Web 服务执行一个名为 service1.giveMeSomeData
的端点方法。如果您的网络服务然后将其路由到当前分配给实例Service1
的某个类的实例中的giveMeSomeData
方法,那就由它决定! (PHP 服务端)。这不是 JSON-RPC 的一个特性,它是由您正在使用的端点路由器组成的。
PHP 客户端上的等效调用可能类似于$client->call('Service1.giveMeSomeData', array('name'))
这取决于您使用的 JSON-RPC 库。一些 PHP 客户端库构建了一个 ad-hoc 类的实例,该类实现了 PHP __call
方法,因此任何无法识别的方法名称都被重定向为对该类中通用 RPC 调用方法的调用。
明确地说,JSON-RPC 端点提供的不是多个命名空间,只有一个 flat 命名空间,可以包含名称中带有.
(点)字符的方法。您的 Web 服务端点如何将这些调用路由到 PHP 函数/方法完全取决于您/它。
PS。如果您解释您在 PHP 中为 JSON-RPC 使用的客户端和服务器库(有很多,质量和完整性各不相同),您将获得更好的帮助。
【讨论】:
以上是关于用于 PHP 的 JSON-RPC 2 客户端能够调用嵌套类中的方法的主要内容,如果未能解决你的问题,请参考以下文章