zentlix / swagger-php
Swagger-php 是 Spiral Framework 的集成包。
Requires
- php: ^8.1
- spiral/boot: ^3.5
- spiral/cache: ^3.5
- spiral/config: ^3.5
- spiral/core: ^3.5
- spiral/http: ^3.5
- spiral/views: ^3.5
- zircote/swagger-php: ^4.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- phpunit/phpunit: ^9.5.27
- roave/security-advisories: dev-latest
- spiral/testing: ^2.2.0
- vimeo/psalm: ^4.30
This package is auto-updated.
Last update: 2024-09-05 06:32:10 UTC
README
zircote/swagger-php 为 Spiral Framework 提供集成包。
需求
请确保您的服务器已配置以下 PHP 版本和扩展
- PHP 8.1+
- Spiral 框架 3.5+
安装
您可以通过 composer 安装此包
composer require zentlix/swagger-php
要在您的 Spiral 框架应用程序中启用此包,您需要将 Spiral\OpenApi\Bootloader\SwaggerBootloader
类添加到应用程序的启动类列表中
protected const LOAD = [ // ... \Spiral\OpenApi\Bootloader\SwaggerBootloader::class, ];
注意 如果您使用
spiral-packages/discoverer
,您无需自己注册启动类。
配置
配置文件应位于 app/config/swagger.php
,它允许您设置选项。以下是一个配置文件的示例
use Spiral\OpenApi\Config\SwaggerConfig; use Spiral\OpenApi\Generator\Parser\ConfigurationParser; use Spiral\OpenApi\Generator\Parser\OpenApiParser; use Spiral\OpenApi\Renderer\HtmlRenderer; use Spiral\OpenApi\Renderer\JsonRenderer; use Spiral\OpenApi\Renderer\YamlRenderer; return [ 'documentation' => [ 'info' => [ 'title' => 'My App', 'description' => 'API documentation', 'version' => '1.0.0', ], ], 'parsers' => [ ConfigurationParser::class, OpenApiParser::class, ], 'renderers' => [ JsonRenderer::FORMAT => JsonRenderer::class, YamlRenderer::FORMAT => YamlRenderer::class, HtmlRenderer::FORMAT => HtmlRenderer::class, ], 'paths' => [ directory('app'), ], 'exclude' => null, 'pattern' => null, 'version' => null, 'cache_key' => SwaggerConfig::DEFAULT_CACHE_KEY, 'generator_config' => [ 'operationId' => [ 'hash' => true, ], ], 'use_cache' => env('APP_ENV') === 'prod', ];
用法
首先,创建一个表示您想要记录的资源实体的类。例如,您可以创建一个 User 实体来表示用户资源
namespace App\Entity; use OpenApi\Attributes as OA; #[OA\Schema( schema: 'User', description: 'User record', required: ['email', 'first_name', 'last_name'], type: 'object', )] class User { #[OA\Property(type: 'string')] public string $email; #[OA\Property(property: 'first_name', type: 'string')] public string $firstName; #[OA\Property(property: 'last_name',type: 'string')] public string $lastName; }
接下来,创建一个控制器来处理资源的操作,并将 Swagger 属性添加到操作中,以描述端点的行为。例如,您可以创建一个 UserController 来处理用户资源的 list 操作
use OpenApi\Attributes as OA; use Psr\Http\Message\ResponseInterface; class UserController { #[OA\Get( path: '/api/v1/users', tags: ['User'], parameters: [ new OA\Parameter(ref: '#/components/parameters/page'), new OA\Parameter(ref: '#/components/parameters/limit'), new OA\Parameter( name: 'sort', description: 'The field used to order users', in: 'query', schema: new OA\Schema(type: 'string'), examples: [ 'user.first_name' => new OA\Examples( example: 'user.first_name', summary: 'Sort by `user.first_name` field', value: 'user.first_name' ), 'user.last_name' => new OA\Examples( example: 'user.last_name', summary: 'Sort by `user.last_name` field', value: 'user.last_name' ), ] ), new OA\Parameter(ref: '#/components/parameters/direction') ], responses: [ new OA\Response( response: 200, description: 'Retrieve a collection of users', content: new OA\JsonContent( properties: [ new OA\Property( property: 'meta', ref: '#/components/schemas/ResponseCollectionMeta' ), new OA\Property( property: 'data', description: 'Collection of users', type: 'array', items: new OA\Items(type: 'array', items: new OA\Items( properties: [ new OA\Property( property: 'uuid', type: 'string', example: '7be33fd4-ff46-11ea-adc1-0242ac120002' ), new OA\Property( property: 'type', type: 'string' ), new OA\Property( property: 'attributes', ref: '#/components/schemas/User' ), ], type: 'object' )) ), ], type: 'object' ) ), ] )] public function list(): ResponseInterface { // ... } }
一些元素如 page、limit、direction 参数。可以使用 ResponseCollectionMeta 模式在多个地方。因此,它们可以在配置文件中定义
// file app/config/swagger.php return [ 'documentation' => [ 'info' => [ 'title' => 'My App', 'description' => 'My App API Documentation', 'version' => '1.0.0' ], 'components' => [ 'parameters' => [ 'page' => [ 'name' => 'page', 'in' => 'query', 'example' => 1, 'schema' => [ 'type' => 'integer' ] ], 'limit' => [ 'name' => 'limit', 'in' => 'query', 'example' => 25, 'schema' => [ 'type' => 'integer' ] ], 'direction' => [ 'name' => 'direction', 'in' => 'query', 'schema' => [ 'type' => 'string' ], 'examples' => [ 'asc' => [ 'value' => 'asc', 'summary' => 'Sort Ascending' ], 'desc' => [ 'value' => 'desc', 'summary' => 'Sort Descending' ] ] ] ], 'schemas' => [ 'ResponseCollectionMeta' => [ 'type' => 'object', 'properties' => [ 'size' => [ 'type' => 'integer' ], 'page' => [ 'type' => 'integer' ], 'total' => [ 'type' => 'integer' ] ] ] ] ] ], ];
此包提供了一个 Spiral\OpenApi\Controller\DocumentationController
控制器,可以以 HTML、JSON 和 YAML 等多种格式渲染文档。HTML 格式使用 Swagger UI
来显示文档。要使用此控制器,需要在 App\Application\Bootloader\RoutesBootloader
文件中添加一个路由
use Spiral\OpenApi\Controller\DocumentationController; final class RoutesBootloader extends BaseRoutesBootloader { protected function defineRoutes(RoutingConfigurator $routes): void { // ... $routes ->add('swagger-api-html', '/api/docs') ->action(DocumentationController::class, 'html'); $routes ->add('swagger-api-json', '/api/docs.json') ->action(DocumentationController::class, 'json'); $routes ->add('swagger-api-yaml', '/api/docs.yaml') ->action(DocumentationController::class, 'yaml'); // ... } }
测试
composer test
composer psalm
composer cs
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件