open-solid/open-api-bundle

为 Symfony 全栈框架提供 OpenApi 的紧密集成

安装: 60

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v0.1.0 2024-08-09 18:27 UTC

This package is auto-updated.

Last update: 2024-09-09 18:54:03 UTC


README

将著名的 zircote/swagger-php 库紧密集成到 Symfony 全栈框架中,以快速生成 OpenAPI 规范并构建 Restful API。

此包专为 API-First 开发创建。

安装

composer require open-solid/open-api-bundle

config/routes.yaml 中导入包的路由以显示 Swagger API 文档

openapi:
    resource: '@OpenApiBundle/config/routes.php'

基本示例

同时定义 OpenAPI 规范和端点

<?php

namespace Api\Catalog\Controller\Post;

use Api\Catalog\Model\Product;
use OpenSolid\OpenApiBundle\Attribute\Payload;
use OpenSolid\OpenApiBundle\Routing\Attribute\Post;

class PostProductAction
{
    #[Post('/products')]
    public function __invoke(#[Payload] PostProductPayload $Payload): Product
    {
        return new Product($body->name, $Payload->price);
    }
}

主要功能

  • 从 PHP 属性生成 OpenAPI 规范(主要基于 zircote/swagger-php
    • 自动从 PHP 类和方法中猜测 OperationSchemaProperty
  • 暴露 Swagger UI 以探索 OpenAPI 规范并测试 API 端点
  • 以 JSON 或 YAML 格式导出 OpenAPI 规范(通过 HTTP 和控制台命令)
  • 以 JSON 或 YAML 格式导入 OpenAPI 规范(通过配置文件)
  • 使用相同的属性定义 Symfony 路由和 OpenAPI 路径
    • #[Post]#[Get]#[Put]#[Patch]#[Delete]
  • 条件 OpenAPI 路径/路由定义
    • 示例: #[Get('/me', when: 'service("toggle_me").isEnabled()')]
  • Symfony 属性缩写
    • #[Payload] 替代 #[MapRequestPayload]
    • #[Query] 替代 #[MapQueryString]
  • OpenAPI 属性缩写
    • #[Path] 替代 #[PathParameter]
    • #[Param] 替代 #[QueryParameter]
  • 使用 OpenAPI 属性定义 Symfony 的验证约束
    • 示例: #[Property(minLength: 3, maxLength: 255)]
  • 自动控制器响应序列化(默认为 JSON 格式)
  • 从 API 规范生成新端点(WIP)(基于 open-solid/open-api-assistant-bundle

许可

此软件根据 MIT 许可证 发布