stealth / jsonrpc-client
Laravel 的 JsonRpc 客户端
Requires
- php: >=5.6.4
- illuminate/log: ~5.2|~5.3|~5.4
README
描述
JsonRpc 客户端 - JsonRpc 服务器客户端实现。按照 JsonRpc 2.0 规范工作。已测试并与 Tochka 的原始 JsonRpc 服务器兼容。
安装
Laravel
composer require tochka-developers/jsonrpc-client
- 如果计划使用自动生成代理客户端,需要在应用程序配置中添加服务提供者(
config/app.php
)
'providers' => [ //... Tochka\JsonRpcClient\ServiceProvider::class, ],
- 发布配置
php artisan vendor:publish --provider="Tochka\JsonRpcClient\ServiceProvider"
Lumen
composer require tochka-developers/jsonrpc-client
- 将配置从包中复制到项目中(
vendor/tochka-developers/jsonrpc/config/jsonrpc.php
)到(config/jsonrpc.php
) - 在
bootstrap/app.php
中连接配置
$app->configure('jsonrpc');
- 在
bootstrap/app.php
中启用支持门面
$app->withFacades();
- 如果计划使用自动生成代理客户端,请在
bootstrap/app.php
中注册服务提供者Tochka\JsonRpcClient\ServiceProvider
$app->register(Tochka\JsonRpcClient\ServiceProvider::class);
使用
配置
配置位于文件 app/jsonrpcclient.php
中。在此文件中指定所有 JsonRpc 连接的设置。
clientName
- 客户端名称。此名称将作为所有请求 ID 的前缀插入。允许识别服务。default
- 默认连接。应包含连接名称。connections
- 连接数组。每个连接都必须具有唯一的键(连接名称)。
连接设置
url
- 连接到 JsonRpc 服务器的 URL 地址(或 IP)。必须包含到端点的完整路径(例如:https://api.jsonrpc.com/v1/jsonrpc)。auth
- 认证设置。有两种认证方式
auth.headerToken
- 使用头部令牌的认证。内部配置使用参数
auth.headerToken.name
- 头部名称auth.headerToken.key
- 在头部中传递的密钥
auth.http
- HTTP 认证
auth.http.scheme
- 认证方案。可能的选项:basic
、digest
、ntlm
、gss
、any
(包含所有方案 - basic、digest、ntlm、gss)、safe
(仅包含安全方案 - digest、ntlm、gss)auth.headerToken.username
- 用户名auth.headerToken.password
- 密码
key
- 授权令牌。如果服务器不使用头部认证,则可以不指定。clientClass
- 作为代理类使用的类。需要指定全名(包括命名空间)。在自动生成代理类时使用。
无代理类调用
调用 JsonRpc 方法
use Tochka\JsonRpcClient\Client; //.... $result = Client::fooBar('Some text');
如果需要使用特定连接,则使用 get
方法。
$result = Client::get('api')->fooBar('Some text');
如果没有指定特定连接,则使用默认连接。
默认情况下,客户端将所有传入方法的参数作为索引数组传递。如果 JsonRpc 服务器需要传递命名参数,请使用 call
方法。
$result = Client::get('api')->call('fooBar', ['text' => 'Some text']);
客户端支持通过单个请求调用多个远程方法
$api = Client::get('api')->batch(); $resultFoo = $api->foo('params'); $resultBar = $api->bar(123); $resultSome = $api->call('someMethod', ['param1' => 1, 'param2' => true]); $api->execute();
在此示例中,变量 $resultFoo、$resultBar 和 $resultSome 将是空的 Tochka\JsonRpcClient\Response
类,直到调用 execute
方法。之后,将对 JsonRpc 服务器发出一个请求,变量将用从服务器返回的结果填充。
客户端支持使用 cache
方法缓存结果
$result = Client::get('api')->cache(10)->fooBar('Some text');
在此调用中,结果将被缓存 10 分钟,并且后续具有相同参数的此方法调用不会将请求发送到服务器,结果将直接从缓存中获取。当然,只有成功的调用才会缓存结果。
多调用也支持缓存
$api = Client::get('api')->batch(); $resultFoo = $api->cache(10)->foo('params'); $resultBar = $api->bar(123); $resultSome = $api->cache(60)->call('someMethod', ['param1' => 1, 'param2' => true]); $api->execute();
请注意,只有被 cache
方法调用之前的方法才会被缓存。
代理类生成
代理类是JsonRpcClient的子类,它包含了所有可用的JsonRpc服务器方法的信息,并且自身也实现了参数映射,将这些参数映射为一个关联数组。如果服务器能够返回SMD方案,则此类可以自动生成。
要生成类,请使用以下命令
php artisan jsonrpc:generateClient connection
为了成功生成,需要满足以下条件
- JsonRpc服务器必须支持返回SMD方案(通过传递GET参数 ?smd)
- 建议使用
tochka-developers/jsonrpc
作为服务器。该包能够返回更详细的信息,以实现更精确的代理类生成 - 必须指定JsonRpc服务器的URL地址
- 必须指定代理类的全名。类文件的路径将根据命名空间和
composer
设置自动生成。 - 存放代理类的文件夹必须具有写权限
如果所有条件都满足,则会为指定的连接创建代理类。如果服务器方法更新,需要更新代理类(即服务器方法更新) - 请再次运行指定命令。如果需要为所有指定的连接生成类,请不指定连接运行指定命令
php artisan jsonrpc:generateClient
通过代理类调用
代理类已经包含了所使用的连接信息,因此不需要调用get
方法。此外,代理类还会自动实现参数映射,将这些参数映射为关联数组以传递到JsonRpc服务器。只有当JsonRpc服务器使用关联参数时,才会进行映射实现。
调用示例
// Single call $result = Api::fooBar('Some text'); // Multiple call $api = Api::batch(); $resultFoo = $api->cache(10)->foo('params'); $resultBar = $api->bar(123); $resultSome = $api->cache(60)->someMethod(1, true); $api->execute();