alireza-h/php-openapi

PHP Open Api 生成器

0.3.0 2023-01-22 10:05 UTC

This package is auto-updated.

Last update: 2024-09-22 14:16:17 UTC


README

Open API JSON Preview

Open API Swagger UI Preview

安装

独立

  • 克隆项目

  • 在项目根目录运行 composer update

  • src/Document 目录作为示例,创建自己的 OpenApiOperationGeneratorOpenApiDocumentGenerator

    OpenApiOperationGenerator 负责生成 Open API 操作,而 OpenApiDocumentGenerator 负责生成 Open API JSON 文档。每个 OpenApiOperationGenerator 的公共方法生成一个 Open API 操作(使用反射)。

  • 在项目根目录运行 php -S localhost:8001

    • 在浏览器中打开 http://loclahost:8001 以查看 Open API JSON 文档
    • 在浏览器中打开 http://loclahost:8001?swagger 以查看 Open API Swagger UI

现有项目的依赖

  • 安装包

    composer require alireza-h/php-openapi
  • src/Document 目录作为示例,创建自己的 OpenApiOperationGeneratorOpenApiDocumentGenerator

    除了使用 OpenApiDocumentGenerator,您还可以创建自己的 OpenApiBuilder 对象并将 OpenApiOperation 添加到构建器对象。

    OpenApiBuilder::openapi()
        ->info(
            [
                'title' => 'API',
                'description' => 'API Description',
                'version' => '1.0.0'
            ]
        )
        ->server(
            [
                'url' => '{scheme}://{host}/{base_path}',
                'variables' => [
                    'scheme' => [
                        'enum' => [
                            'http',
                            'https'
                        ],
                        'default' => 'http'
                    ],
                    'host' => [
                        'default' => 'localhost:8000'
                    ],
                    'base_path' => [
                        'default' => 'api'
                    ],
                ]
            ]
        )
        ->component(
            'securitySchemes',
            'bearerAuth',
            [
                'type' => 'http',
                'scheme' => 'bearer',
                'bearerFormat' => 'JWT',
            ]
        )
        ->security(
            [
                'bearerAuth' => []
            ]
        )
        ->operation(
            OpenApiOperation::post('/auth/signup')
                ->tags(['Auth'])
                ->summary('Signup')
                ->description('Signup description')
                ->requestBody(
                    OpenApiRequestBody::create()
                        ->properties(
                            [
                                [
                                    'name' => 'email',
                                    'type' => 'string',
                                    'format' => 'email',
                                    'example' => 'email@example.com',
                                    'description' => 'Email',
                                ],
                                ...
                            ]
                        )
                        ->mediaTypeMultipartFormData()
                )
                ->response(
                    OpenApiResponse::create()
                        ->example(
                            [
                                'data' => [],
                                'message' => null
                            ]
                        )
                )
        )
        ->operation(
            OpenApiOperation::put('/auth/confirm')
                ->tags(['Auth'])
                ->summary('ConfirmSignup')
                ->description('Confirm signup description')
                ->requestBody(
                    OpenApiRequestBody::create()
                        ->properties(
                            [
                                [
                                    'name' => 'email',
                                    'type' => 'string',
                                    'format' => 'email',
                                    'example' => 'email@example.com',
                                    'description' => 'Email',
                                ],
                                [
                                    'name' => 'code',
                                    'example' => 12345,
                                ]
                            ]
                        )
                        ->mediaTypeXWwwFormUrlencoded()
                )
                ->response(
                    OpenApiResponse::create()
                        ->example(
                            [
                                'data' => [],
                                'message' => null
                            ]
                        )
                )
        )
        ->docs();
  • 创建自己的自定义路由以服务 Open API JSON 文档和 Swagger UI