用于 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 客户端能够调用嵌套类中的方法的主要内容,如果未能解决你的问题,请参考以下文章

用于嵌入式平台的 C++ 中的简单 JSON-RPC?

Swagger 和 json-rpc

JSON-RPC - 如何制作一个唯一的 ID?

基于 JSON-RPC 2.0 的 API 出现问题

如何在 PHP 中构造 JSON-RPC 结构中的 CURL?

Go & PHP json-rpc 通信