w2w/laravel-apie

此包已被弃用,不再维护。未建议替换包。

Laravel 对 w2w/apie 的包装

3.3.0 2020-07-22 14:48 UTC

README

Laravel 对 apie 库的包装 CircleCI codecov Travis Scrutinizer Code Quality

它做什么

这是 Laravel 对 w2w/apie 库的一个小包装。这个库将简单的 POPO(Plain Old PHP Objects)映射到 REST API 调用。它与优秀的 api platform 库非常相似,但适用于 Laravel。

它还添加了一个名为 EloquentModelDataLayer 的类,用于将 API 资源持久化和检索为 Eloquent 模型,并添加了一个状态检查,以查看它是否可以连接到数据库。请参阅 apie 的文档https://github.com/pjordaan/apie

Apie 版本 4 的向前兼容性

默认情况下,laravel-apie 仍然会使用旧的 3.* 序列化。在 Apie 版本 4 中,这将发生巨大变化,因此添加了一个配置选项来启用向前兼容的 4.* 版本。

内容

  1. 安装
  2. Lumen 集成
  3. 添加新的 API 资源
  4. 自动注册类
  5. 挂钩 laravel/lumen 错误处理器
  6. 生产优化
  7. 版本控制
  8. 将 Eloquent 与 Apie 集成
  9. 自定义规范化器/值对象
  10. 修改 OpenAPI 规范
  11. 使用自己的控制器
  12. 资源子操作
  13. Laravel 组件集成
  14. PSR6 缓存集成
  15. L5-swagger 集成
  16. 本地化感知 API

安装

在你的 Laravel 包中,你应该执行安装 Laravel 包的常规步骤。

composer require w2w/laravel-apie

如果没有自动发现,请手动将 W2w\Laravel\Apie\Providers\ApiResourceServiceProvider::class 添加到你的服务提供者列表中。

之后运行命令,将配置发布到 apie.php,并运行状态检查迁移。

artisan vendor:publish --provider="W2w\Laravel\Apie\Providers\ApiResourceServiceProvider"
artisan migrate

现在访问 /swagger-ui,查看生成的 OpenApi 规范。它将只包含默认安装的 API 资源的规范,这有助于识别你的 REST API 和健康检查资源。它将检查是否可以连接到数据库。

添加新的 API 资源

在你的 app/ApiResources 中创建此类

<?php
namespace App\RestApi\ApiResources;

use W2w\Lib\Apie\Annotations\ApiResource;
use W2w\Lib\Apie\Plugins\Core\DataLayers\NullDataLayer;

/**
 * @ApiResource(disabledMethods={"get"}, persistClass=NullDataLayer::class)
 */
class SumExample
{
    private $one;

    private $two;

    public function __construct(float $one, float $two)
    {
        $this->one = $one;
        $this->two = $two;
    }

    public function getOne(): float
    {
        return $this->one;
    }

    public function getTwo(): float
    {
        return $this->two;
    }

    public function getAddition(): float
    {
        return $this->one + $this->two;
    }

    public function getSubtraction(): float
    {
        return $this->one - $this->two;
    }

    public function getMultiplication(): float
    {
        return $this->one * $this->two;
    }

    public function getDivison(): ?float
    {
        // === and == can fail because of floating points....
        if (abs($this->two) < 0.000001) {
            return null;
        }
        return $this->one / $this->two;
    }
}

现在我们在 config/apie.php 中应该添加类来将其添加到 API 资源中

<?php
//config/apie.php
use App\ApiResources\SumExample;
use W2w\Lib\Apie\Plugins\ApplicationInfo\ApiResources\ApplicationInfo;
use W2w\Lib\Apie\Plugins\StatusCheck\ApiResources\Status;

return [
'resources' => [ApplicationInfo::class, Status::class, SumExample::class]
];

如果你刷新 /api/doc.json,你可以看到你多了一个用于创建 SumExample 资源的 POST 请求。你可以使用任何 OpenApi 工具或 Postman 测试这个 POST 命令。如果你向 /api/sum_example 发送 POST 请求,并且 body 内容为

{
  "one": 13,
  "two": 1
}

你会得到

{
  "one": 13,
  "two": 1,
  "addition": 14,
  "subtraction": 12,
  "multiplication": 13,
  "divison": 13
}

自动注册 API 资源。

可以在不手动更新 config/apie.php 中的资源列表的情况下自动注册 API 资源。我们可以使用这个方法来自动注册特定命名空间中的所有类

  • 在终端中运行
composer require haydenpierce/class-finder
  • 打开 config/apie.php
  • 按照以下方式编辑文件
<?php
//config/apie.php
use W2w\Lib\Apie\Core\Resources\ApiResourcesFromNamespace;

return [
    'resources' => ApiResourcesFromNamespace::createApiResources('App\RestApi\ApiResources'),
];

现在如果我在命名空间 App\RestApi\ApiResources 内放置一个类,这个类将为 Apie 进行注册。

请确保在生产环境中使用 Laravel 的配置缓存来减轻服务器的负载。