juststeveking/php-sdk

PHP 中构建 SDK 的框架。

3.0.0 2024-01-02 14:37 UTC

This package is auto-updated.

Last update: 2024-08-31 00:37:37 UTC


README

Latest Version PHP Version tests Total Downloads

PHP 中构建 SDK 的框架。

安装

composer require juststeveking/php-sdk

用途

此包的目的是提供一种一致且可互操作的构建 PHP SDK 的方式,以便与第三方 API 一起工作。

使用方法

要开始使用此库,您需要从扩展 Client 类开始。让我们通过构建一个 SDK 来进行说明。

创建您的 SDK 类

use JustSteveKing\Sdk\Client;

final class YourSDK extends Client
{
    //
}

一旦设置好,您就可以开始向类中添加资源。让我们为项目资源添加一个 projects 方法。

use JustSteveKing\Sdk\Client;
use JustSteveKing\Sdk\Tests\Stubs\Resources\ProjectResource;

final class YourSDK extends Client
{
    public function projects()
    {
        return new ProjectResource(
            client: $this,
        );
    }
}

我们返回资源类的实例,通过您的 SDK 作为 client 传递。这样,每个资源都能通过客户端发送请求。

现在,让我们看看如何构建一个资源。

final class ProjectResource
{
    //
}

为了节省时间,有一系列 trait 可以在资源中使用。

  • CanAccessClient - 将添加资源所需的基本构造函数。
  • CanCreateDataObjects - 允许您从 API 响应中创建 DataObject。
  • CanCreateRequests - 允许您使用 PSR-17 工厂创建 HTTP 请求和有效载荷。

让我们看一个完整的资源类的例子。

use Exception;
use JustSteveKing\Sdk\Concerns\Resources;
use JustSteveKing\Tools\Http\Enums\Method;
use Ramsey\Collection\Collection;
use Throwable;

final class ProjectResource
{
    use Resources\CanAccessClient;
    use Resources\CanCreateDataObjects;
    use Resources\CanCreateRequests;

    public function all(): Collection
    {
        $request = $this->request(
            method: Method::GET,
            uri: '/projects',
        );

        try {
            $response = $this->client->send(
                request: $request,
            );
        } catch (Throwable $exception) {
            throw new Exception(
                message: 'Failed to list test.',
                code: $exception->getCode(),
                previous: $exception,
            );
        }

        return (new Collection(
            collectionType: Project::class,
            data: array_map(
                callback: static fn(array $data): Project => Project::make(
                    data: $data,
                ),
                array: (array) json_decode(
                    json: $response->getBody()->getContents(),
                    associative: true,
                    flags: JSON_THROW_ON_ERROR,
                ),
            ),
        ));
    }
}

我们首先创建一个请求,然后通过客户端发送它来尝试获取响应。

一旦我们有了响应,我们通过 Ben Ramsey 的包创建一个 Collection。我们传递每个项目的预期类型,然后是作为数组的数组数据。为了创建数据,我们映射响应内容并静态创建一个新的 DataObject。

这使我们的代码更加干净、简洁且可测试。

测试

运行测试

composer run test

静态分析

运行静态分析检查

composer run stan

代码风格

运行代码风格修复器

composer run pint

重构

运行 rector 代码重构

composer run refactor

特别感谢

没有以下包和人员,这个框架将难以构建。

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件