pmbservices / swaggerclient
该软件包的官方仓库似乎已消失,因此该软件包已被冻结。
Requires
- guzzlehttp/guzzle: ^7.0
README
安装
composer require pmbservices/swaggerclient
如何使用
SwaggerClient 提供一个基类 PMBServices\Swagger\SwaggerClient
用于加载 Swagger JSON 定义文件,并通过 PHP 的魔法方法 __call
创建对 REST 服务的代理。
您可以通过扩展此基类来在软件中使用特定的实现。
目前提供了以下两个扩展类
PMBServices\SwaggerClient\SwaggerClaroline
用于 LMS ClarolinePMBServices\SwaggerClient\SwaggerDolibarr
用于 CRM Dolibarr
SwaggerClient
解析 Swagger 定义文件中的所有路径,提取每个路径中的必填参数,例如 {param}
,然后根据 HTTP 方法提取其他参数类型 body
或 query
。
然后您可以通过以下命名约定调用任何 Web 服务方法
[协议][路径驼峰命名]()
例如,如果 Swagger 服务器提供路径 GET /order/{id}
,则方法的名称为 getOrderId()
传递参数
要将参数传递给方法调用,只需传递一个数组:["parameter name" => value, ...]
例如:$swaggerclient->getOrderId(["id"=>1234,"limit"=>100])
返回
返回值是使用 Web 服务的 JSON 响应解析的 PHP 对象。我们尚未处理 XML、文件或流。
扩展 SwaggerClient
要为特定服务器扩展 SwaggerClient 类,您必须在构造函数中定义以下属性
假设 Swagger Web 服务在 https://myserver/mysoftware/api/swagger.json
baseUrl
:Web 服务的 URL 的基础,例如https://myserver
swaggerPath
:从baseUrl
到 Swagger JSON 文件的路径,例如/mysoftware/api/swagger.json
然后您必须使用 setOption
方法设置 Guzzle HTTP 客户端默认的 HTTP 选项,例如设置 key 的头信息。您还可以添加任何其他由 Guzzle HTTP 客户端允许的选项。
当解析 Swagger 定义文件时,baseUrl
和 basePath
将替换为 Swagger 发送的值。
完整示例
<?php
namespace PMBServices\SwaggerClient;
use PMBServices\Swagger\SwaggerClient;
class SwaggerDolibarr extends SwaggerClient {
public function __construct($baseUrl,$basePath,$key="") {
$this->baseUrl=$baseUrl;
$this->swaggerPath="$basePath/api/index.php/explorer/swagger.json";
if ($key) $this->setOption([
"headers"=>[
"DOLAPIKEY" => $key
]
]);
parent::__construct();
}
}
对于 Dolibarr,API 的路径始终是 /api/index.php/explorer/swagger.json
,在这种情况下,我们将第一个参数视为基本主机,将 basePath
视为到 /api
的路径... 注意 setOption
以在头信息中传递 key DOLAPIKEY
。
使用它!
我的 Dolibarr 部署在 https://myserver/doliprod
$doli=new PMBServices\SwaggerClient\SwaggerDolibarr("https://myserver","/doliprod","1zxky");
$doli->setOption(["cert"=>"cert.pem","ssl_key"=>"cert.key"]);
$doli->connect();
$orders=$doli->getOrder();
var_dump($orders);
$doli->setOption(["cert"=>"cert.pem","ssl_key"=>"cert.key"]);
是因为我有一个使用 SSL 客户端证书的强认证。然后您必须调用 $doli->connect()
方法来获取 Swagger 定义文件并解析它以确定路径。然后,JSON Swagger 定义文件将缓存在 cache
目录中以供更快地实例化。