w2w / laravel-apie
Laravel 对 w2w/apie 的包装
Requires
- php: ^7.2
- doctrine/annotations: ^1.7
- doctrine/cache: ^1.8
- illuminate/container: ^5.6|^6.0|^7.0
- illuminate/contracts: ^5.6|^6.0|^7.0
- illuminate/database: ^5.6|^6.0|^7.0
- illuminate/http: ^5.6|^6.0|^7.0
- illuminate/routing: ^5.6|^6.0|^7.0
- ramsey/uuid: ^3.8
- symfony/cache: ^4.4|^5.0
- symfony/options-resolver: ^4.4|^5.0
- symfony/psr-http-message-bridge: ^1.2
- symfony/serializer: ^4.4|^5.0
- w2w/apie: ^3.4.2
Requires (Dev)
- mockery/mockery: ^1.2
- nunomaduro/larastan: ^0.4.3|^0.5|^0.6.1
- orchestra/testbench: 3.6.*
Suggests
- madewithlove/illuminate-psr-cache-bridge: For caching in Laravel 5.*
- dev-master
- v4.x-dev
- 3.3.0
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.0
- 3.0.1
- 3.0.0.x-dev
- 3.0.0
- v2.x-dev
- 2.4.0
- 2.3.0
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-tmp
- dev-improved-eloquent-model-data-layer
- dev-feature-error-handler
- dev-feature/metadata-options
- dev-feature-bind-controller
- dev-alternate-openapi-php
- dev-feature-cache-bridge-optional
- dev-support-laravel-6
This package is auto-updated.
Last update: 2022-06-12 09:59:37 UTC
README
它做什么
这是 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.* 版本。
内容
- 安装
- Lumen 集成
- 添加新的 API 资源
- 自动注册类
- 挂钩 laravel/lumen 错误处理器
- 生产优化
- 版本控制
- 将 Eloquent 与 Apie 集成
- 自定义规范化器/值对象
- 修改 OpenAPI 规范
- 使用自己的控制器
- 资源子操作
- Laravel 组件集成
- PSR6 缓存集成
- L5-swagger 集成
- 本地化感知 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 的配置缓存来减轻服务器的负载。