stealth/jsonrpc-client

Laravel 的 JsonRpc 客户端

v2.0.2 2018-10-05 19:10 UTC

This package is not auto-updated.

Last update: 2024-09-30 05:59:57 UTC


README

描述

JsonRpc 客户端 - JsonRpc 服务器客户端实现。按照 JsonRpc 2.0 规范工作。已测试并与 Tochka 的原始 JsonRpc 服务器兼容。

安装

Laravel

  1. composer require tochka-developers/jsonrpc-client
  2. 如果计划使用自动生成代理客户端,需要在应用程序配置中添加服务提供者(config/app.php
'providers' => [
    //...
    Tochka\JsonRpcClient\ServiceProvider::class,
],
  1. 发布配置
php artisan vendor:publish --provider="Tochka\JsonRpcClient\ServiceProvider"

Lumen

  1. composer require tochka-developers/jsonrpc-client
  2. 将配置从包中复制到项目中(vendor/tochka-developers/jsonrpc/config/jsonrpc.php)到(config/jsonrpc.php
  3. bootstrap/app.php 中连接配置
$app->configure('jsonrpc');
  1. bootstrap/app.php 中启用支持门面
$app->withFacades();
  1. 如果计划使用自动生成代理客户端,请在 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 - 认证方案。可能的选项:basicdigestntlmgssany(包含所有方案 - 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

为了成功生成,需要满足以下条件

  1. JsonRpc服务器必须支持返回SMD方案(通过传递GET参数 ?smd)
  2. 建议使用tochka-developers/jsonrpc作为服务器。该包能够返回更详细的信息,以实现更精确的代理类生成
  3. 必须指定JsonRpc服务器的URL地址
  4. 必须指定代理类的全名。类文件的路径将根据命名空间和composer设置自动生成。
  5. 存放代理类的文件夹必须具有写权限

如果所有条件都满足,则会为指定的连接创建代理类。如果服务器方法更新,需要更新代理类(即服务器方法更新) - 请再次运行指定命令。如果需要为所有指定的连接生成类,请不指定连接运行指定命令

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();