apigee/apigee-client-php

连接到 Apigee Edge API 的客户端库。


README

Build Status Code Coverage Latest Stable Version Total Downloads Minimum PHP Version License

Apigee API 客户端库为 PHP 提供了一个简单的接口,用于开发调用 Apigee Edge/X 管理 API 的 PHP 客户端。使用 Apigee API 客户端库,您可以使用对象而不是直接编写代码来处理 HTTP 请求和响应调用。

具体来说,Apigee API 客户端库为 PHP 提供以下类别的 Apigee Edge 和 Apigee 管理API访问权限

Apigee Edge

Apigee

有关 Apigee Edge 和 Apigee 管理API的更多信息,请参阅 Apigee 文档中的开始使用 Apigee Edge 管理API开始使用 Apigee 管理API

使用 HTTPlug 库构建的 Apigee API 客户端库为 PHP 提供了一个与 HTTP 客户端实现无关的库。您可以选择最适合您项目需求客户端。

如果您需要 PHP < 7.1 或货币化 API 支持,请安装较旧的 edge-php-sdk 版本。我们计划在不久的将来将货币化 API 支持添加到这个库中。

私有云的 Edge

在私有云安装中,核心持久服务 (CPS) 不可用。PHP API 客户端支持在列出 API 端点时进行分页(例如:列出开发者)。如果 CPS 不可用,PHP API 客户端将模拟分页功能,并触发一个 E_USER_NOTICE 级别的错误,以告知开发者分页结果是 PHP 生成的,而不是管理 API 服务器生成的。此通知可以通过多种方式抑制。您可以通过将 PHP 的 error_reporting 配置更改为抑制 所有 E_NOTICE 级别的错误,例如将其值更改为 E_ALL | ~E_NOTICE。您还可以通过将环境变量 APIGEE_EDGE_PHP_CLIENT_SUPPRESS_CPS_SIMULATION_NOTICE 的值设置为假值来仅抑制由 PHP API 客户端生成的通知,例如:APIGEE_EDGE_PHP_CLIENT_SUPPRESS_CPS_SIMULATION_NOTICE=1

对 Apigee 混合组织的支持:GA 发布

已添加对Apigee 混合 API 的支持,并已认为其可用于生产。如果您遇到任何问题,请将问题添加到我们的GitHub 问题队列

安装客户端库

在安装 Apigee API 客户端库之前,您必须安装一个 HTTP 客户端或适配器。有关可用客户端和适配器的完整列表,请参阅 PHP-HTTP 文档中的客户端 & 适配器

要使用Guzzle 6安装客户端库,请输入以下命令

$ composer require php-http/guzzle6-adapter:^1.1.1
$ composer require apigee/apigee-client-php

使用示例

基本API使用

<?php

use Apigee\Edge\Api\Management\Controller\DeveloperController;
use Apigee\Edge\Api\Management\Entity\Developer;
use Apigee\Edge\Exception\ApiException;
use Apigee\Edge\Exception\ClientErrorException;
use Apigee\Edge\Exception\ServerErrorException;
use Apigee\Edge\Client;
use Http\Message\Authentication\BasicAuth;

include_once 'vendor/autoload.php';

$username = 'my-email-address@example.com';
$password = 'my-secure-password';
$organization = 'my-organization';

$auth = new BasicAuth($username, $password);
// Initialize a client and use basic authentication for all API calls.
$client = new Client($auth);

// Initialize a controller for making API calls, for example a developer controller to working with developer entities.
$ec = new DeveloperController($organization, $client);

try {
    /** @var \Apigee\Edge\Api\Management\Entity\Developer $entity */
    $entity = $ec->load('developer1@example.com');
    $entity->setEmail('developer2@example.com');
    $ec->update($entity);
    // Some setters on entities are intentionally marked as @internal because the underlying entity properties can not
    // be changed on the entity level. Those must be modified by using dedicated API calls.
    // So instead of this:
    $entity->setStatus(Developer::STATUS_INACTIVE);
    // You should use this:
    $ec->setStatus($entity->id(), Developer::STATUS_INACTIVE);
} catch (ClientErrorException $e) {
    // HTTP code >= 400 and < 500. Ex.: 401 Unauthorised.
    if ($e->getEdgeErrorCode()) {
        print $e->getEdgeErrorCode();
    } else {
        print $e;
    }
} catch (ServerErrorException $e) {
    // HTTP code >= 500 and < 600. Ex.: 500 Server error.
} catch (ApiException $e) {
    // Anything else, because this is the parent class of all the above.
}

高级示例

单元测试

如果尚未设置,使用Composer设置测试套件

$ composer install --dev

使用PHPUnit运行它

$ composer test

新更改的测试不需要Apigee Edge连接。默认情况下,单元测试使用offline-test-data文件夹的内容来使测试更快、更简单。如果您想使用真实的Apigee Edge实例运行单元测试,您必须指定以下环境变量(不带括号)

APIGEE_EDGE_PHP_CLIENT_API_CLIENT=\Apigee\Edge\Tests\Test\Client
APIGEE_EDGE_PHP_CLIENT_HTTP_CLIENT=\Http\Adapter\Guzzle6\Client
APIGEE_EDGE_PHP_CLIENT_BASIC_AUTH_USER=[YOUR-EMAIL-ADDRESS@HOST.COM]
APIGEE_EDGE_PHP_CLIENT_BASIC_AUTH_PASSWORD=[PASSWORD]
APIGEE_EDGE_PHP_CLIENT_ORGANIZATION=[ORGANIZATION]
APIGEE_EDGE_PHP_CLIENT_ENVIRONMENT=[ENVIRONMENT]
# If test organization does not support CPS.
APIGEE_EDGE_PHP_CLIENT_SUPPRESS_CPS_SIMULATION_NOTICE=1

设置这些环境变量的方法有很多,但可能最简单的是从phpunit.xml.dist文件创建一个副本作为phpunit.xml,并在元素内部取消注释env元素。

还可以创建并使用自己的数据集。如果您想使用自己的离线测试数据集,只需定义APIGEE_EDGE_PHP_CLIENT_OFFLINE_TEST_DATA_FOLDER环境变量,将其值设置为您的测试数据集的父文件夹。

PS.: 当使用离线测试数据集时,某些单元测试无法执行,这些测试将自动标记为跳过。

我们的向后兼容性(BC)承诺

此库遵循语义版本控制策略。这意味着只有主要版本(例如3.0、4.0等)允许破坏向后兼容性,我们将尽力保持这种状态。PHP API客户端必须与支持的Apigee Edge API的最新版本兼容。如您所见,几乎每个类都至少实现了此库中的一个接口,因此,我们建议在构建在此库之上时,依赖于接口定义而不是具体类。如果您扩展我们的类,请优先考虑封装而不是继承。如果支持的Apigee Edge API中的更改无法在不更改接口的情况下在PHP API客户端中实现,我们将从这个库中发布一个新的主要版本。

支持

此项目(连接Drupal 8与Apigee Edge)由Google支持。使用我们项目的 issue 队列报告任何问题、问题或反馈。

贡献

我们非常愿意接受对此项目的贡献,请参阅此项目的贡献指南以获取更多详细信息。