2022-05-06 21:23:06
felixfbecker/advanced-json-rpc 是一个高效构建 JSON-RPC 服务的 PHP 库,通过其 Dispatcher 类可自动处理参数类型转换、方法调用和嵌套对象结构,显著提升开发效率与代码可维护性。
核心功能与实践步骤安装与基础配置
通过 Composer 快速安装:composer require felixfbecker/advanced-json-rpc
创建服务类并定义方法(支持类型声明):class MyService { public function myMethod(string $param1, int $param2): string { return "Hello, $param1! $param2"; }}
Dispatcher 的核心作用
自动参数处理:解析 JSON-RPC 请求中的 params,自动匹配方法参数类型(如字符串、整数),无需手动转换。
方法调用:根据请求的 method 字段动态调用服务类中的对应方法。
响应生成:返回符合 JSON-RPC 2.0 规范的响应,包含 id、result 或 error 字段。
示例代码:
use AdvancedJsonRpcDispatcher;$dispatcher = new Dispatcher(new MyService());$request = '{ "jsonrpc": "2.0", "id": 1, "method": "myMethod", "params": ["World", 123]}';$response = $dispatcher->dispatch($request);echo $response; // 输出:{"jsonrpc":"2.0","id":1,"result":"Hello, World! 123"}嵌套对象支持
场景:当服务包含子服务(如 UserService 和 OrderService)时,可通过嵌套结构组织代码。
实现方式:在服务类中注入子服务实例,Dispatcher 会递归解析调用路径。
示例:class UserService { public function getUser(int $id): array { return ['id' => $id, 'name' => 'Alice']; }}class MainService { public function __construct(private UserService $userService) {} public function callUserMethod(int $userId) { return $this->userService->getUser($userId); }}$dispatcher = new Dispatcher(new MainService(new UserService()));$request = '{ "jsonrpc": "2.0", "id": 1, "method": "callUserMethod", "params": [1]}';// 响应将调用 MainService->callUserMethod(),进而触发 UserService->getUser()
效率提升:
消除手动解析 JSON、类型检查和错误处理的冗余代码。
Dispatcher 自动处理参数绑定和方法分发,开发时间缩短 50% 以上。
可维护性增强:
代码结构清晰,业务逻辑与服务框架分离。
支持类型声明(如 string $param1),减少运行时错误。
错误处理优化:
内置 JSON-RPC 错误格式(如 -32601 方法未找到、-32602 参数无效)。
示例错误响应:{"jsonrpc":"2.0","id":1,"error":{"code":-32601,"message":"Method not found"}}
复杂参数处理:
若方法需接收对象作为参数,可定义 DTO(数据传输对象)类,并通过 Dispatcher 自动反序列化。
示例:class UserDto { public function __construct(public string $name, public int $age) {}}class MyService { public function createUser(UserDto $user): array { return ['name' => $user->name, 'age' => $user->age]; }}
性能优化:
对于高频调用,可缓存 Dispatcher 实例和服务类对象,避免重复初始化。
使用 PHP 8+ 的 JIT 编译进一步提速。
学习资源:
参考
查阅
felixfbecker/advanced-json-rpc 通过自动化请求处理、类型安全和嵌套支持,为 PHP 开发者提供了高效、可靠的 JSON-RPC 服务构建方案。其设计哲学是“让开发者专注业务逻辑”,而非陷入底层细节。无论是简单 API 还是复杂微服务架构,该库均能显著提升开发体验与代码质量。