bpartner / jsonrpc
JSON RPC 服务器
3.1
2024-01-12 14:35 UTC
Requires
- php: ^8.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0
- phpunit/phpunit: ^9.0
README
这是一个简单的 JSON-RPC 2.0 服务器,适用于 Laravel,不包含批处理请求。
安装
您可以通过 composer 安装此包
composer require bpartner/jsonrpc php artisan vendor:publish --tag=config
配置
在 config/jsonrpc.php
中设置命名空间和 Bearer 令牌(默认 1234567890)
如果 Bearer 令牌无效,请将以下规则添加到您的 .htaccess 文件中
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
基本用法
php artisan make:rpc MyHandler
在创建处理程序后,在 handle 方法中放入您的业务逻辑,并返回包含响应数据的数组。
public function handle(): array { $myData = MyBusinessLogicClass::make($this->params); return ['data' => $myData]; }
以 Bearer Token 的形式,发送 POST 请求到 /jsonrpc/v1/endpoint
,符合 Json RPC 2.0 标准。
{ "jsonrpc": "2.0", "method": "myHandler", "params": { "param1": "param1", "param2": { "param3": 123, } }, "id": "abracadabra" }
使用处理程序中的 rule
方法来验证输入参数。
protected function rule(): array { return [ 'param1' => 'require|string', 'param2.param3' => 'require|numeric' ]; }
高级用法
您可以使用任何路由、中间件和守卫来为您的 RPC 端点。
- 在
config/jsonrpc.php
中禁用默认路由 - 创建您的自定义路由
- 创建您的中间件
- 创建您的控制器并使用 RpcService
中间件示例
class AuthToken { public function handle(Request $request, Closure $next) { if ($request->header('x-auth-token') !== config('jsonrpc.token')) { return response()->json([ 'status' => 'error', 'code' => 401, 'message' => 'Unauthorized', ]); } return $next($request); } }
控制器示例
namespace App\Http\Controllers use Bpartner\Jsonrpc\RpcFormRequest; use Bpartner\Jsonrpc\RpcRequest; use Bpartner\Jsonrpc\RpcServiceInterface; use Illuminate\Routing\Controller; class MyContoller extends Controller { public function __invoke(RpcFormRequest $request, RpcServiceInterface $rpcService) { return $rpcService->run(); } }
中间件
为任何 RpcHandler 创建自己的中间件
protected string|array $middlewares = 'guest'; //or protected string|array $middlewares = [ MyMiddleware::class, SecondMiddleware::class ];
重要
此包不支持批处理请求。例如,此请求不受支持
[ {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"}, {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}, {"jsonrpc": "2.0", "method": "subtract", "params": [42,23], "id": "2"}, {"foo": "boo"}, {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"}, {"jsonrpc": "2.0", "method": "get_data", "id": "9"} ]
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。