tourze / json-rpc-core
JSON-RPC 2.0 Core
Installs: 5 192
Dependents: 20
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
- nesbot/carbon: ^2.72 || ^3
- psr/log: ^3|^2|^1
- symfony/dependency-injection: ^6.4
- symfony/event-dispatcher-contracts: ^2.5 | ^3
- symfony/http-foundation: ^6.4
- symfony/property-access: ^6.4
- symfony/service-contracts: ^3.5
- symfony/validator: ^6.4
- tourze/arrayable: 0.0.*
- tourze/backtrace-helper: ~0.0.5
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.0
README
This library provides core components compliant with the JSON-RPC 2.0 specification for building JSON-RPC servers and clients in PHP.
Installation
composer require tourze/json-rpc-core
Features
- Fully compliant with JSON-RPC 2.0 specification
- Supports all JSON-RPC request types: single, batch, and notification
- Robust error handling for all standard JSON-RPC error types
- Flexible method resolution interfaces
- Clean object-oriented API
Components
Models
JsonRpcRequest
- Represents a JSON-RPC requestJsonRpcResponse
- Represents a JSON-RPC responseJsonRpcParams
- Wraps request parametersJsonRpcCallRequest
- Handles batch requestsJsonRpcCallResponse
- Handles batch responses
Domain Interfaces
JsonRpcMethodInterface
- Defines the interface for JSON-RPC methodsJsonRpcMethodResolverInterface
- Resolves method names to implementationsJsonRpcMethodParamsValidatorInterface
- Validates method parametersMethodWithValidatedParamsInterface
- Methods with parameter validationMethodWithResultDocInterface
- Methods with result documentation
Exceptions
JsonRpcException
- Base JSON-RPC exceptionJsonRpcParseErrorException
- Parse error exceptionJsonRpcInvalidRequestException
- Invalid request exceptionJsonRpcMethodNotFoundException
- Method not found exceptionJsonRpcInvalidParamsException
- Invalid params exceptionJsonRpcInternalErrorException
- Internal error exception
Usage Example
Creating a JSON-RPC Method
use Tourze\JsonRPC\Core\Domain\JsonRpcMethodInterface; use Tourze\JsonRPC\Core\Model\JsonRpcRequest; class EchoMethod implements JsonRpcMethodInterface { public function __invoke(JsonRpcRequest $request): mixed { return $request->getParams()->all(); } public function execute(): array { return []; } }
处理 JSON-RPC 请求
use Tourze\JsonRPC\Core\Exception\JsonRpcException; use Tourze\JsonRPC\Core\Model\JsonRpcParams; use Tourze\JsonRPC\Core\Model\JsonRpcRequest; use Tourze\JsonRPC\Core\Model\JsonRpcResponse; // 创建请求 $request = new JsonRpcRequest(); $request->setJsonrpc('2.0'); $request->setMethod('echo'); $request->setId('1'); $request->setParams(new JsonRpcParams(['message' => 'Hello, World!'])); // 创建方法实例 $method = new EchoMethod(); // 执行方法并获取响应 $response = new JsonRpcResponse(); $response->setJsonrpc('2.0'); $response->setId($request->getId()); try { $result = $method($request); $response->setResult($result); } catch (JsonRpcException $e) { $response->setError($e); } catch (\Exception $e) { // 将普通异常包装为 JSON-RPC 异常 $jsonRpcException = new JsonRpcException(-32000, $e->getMessage()); $response->setError($jsonRpcException); }
批量请求
通过 JsonRpcCallRequest
和 JsonRpcCallResponse
处理批量请求。详见单元测试中的示例。
测试
vendor/bin/phpunit -c packages/json-rpc-core/phpunit.xml.dist