pmbservices/swaggerclient

该软件包的官方仓库似乎已消失,因此该软件包已被冻结。

维护者

详细信息

forge.enssop.fr/git/swaggerclient

1.0.16 2022-08-12 14:40 UTC

This package is not auto-updated.

Last update: 2023-01-13 17:27:42 UTC


README

安装

composer require pmbservices/swaggerclient

如何使用

SwaggerClient 提供一个基类 PMBServices\Swagger\SwaggerClient 用于加载 Swagger JSON 定义文件,并通过 PHP 的魔法方法 __call 创建对 REST 服务的代理。

您可以通过扩展此基类来在软件中使用特定的实现。

目前提供了以下两个扩展类

  • PMBServices\SwaggerClient\SwaggerClaroline 用于 LMS Claroline
  • PMBServices\SwaggerClient\SwaggerDolibarr 用于 CRM Dolibarr

SwaggerClient 解析 Swagger 定义文件中的所有路径,提取每个路径中的必填参数,例如 {param},然后根据 HTTP 方法提取其他参数类型 bodyquery

然后您可以通过以下命名约定调用任何 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 定义文件时,baseUrlbasePath 将替换为 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 目录中以供更快地实例化。