国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

api文檔+路由自動(dòng)注冊

5.x-dev 版本
2025-02-13 版本更新時(shí)間
810 安裝
4 star

webman-tech/swagger

swagger openapi 在 webman 中一鍵配置啟用

安裝

composer require webman-tech/swagger

特點(diǎn)

  • 基于 zircote/swagger-php(同時(shí)支持 Annotation 和 Attribute 模式)
  • 支持零配置啟動(dòng)(安裝后直接訪問 /openapi 即可看到 swagger UI 的界面)
  • 支持單應(yīng)用下多個(gè) swagger 文檔(多路由,不同 api 文檔)
  • 支持動(dòng)態(tài)修改注解下的 swagger 文檔(解決注解下無法寫動(dòng)態(tài)配置的問題)
  • 支持豐富的配置(host 訪問限制 / swagger-ui 配置 / openapi 配置)
  • 性能優(yōu)先(服務(wù)啟動(dòng)后緩存,開發(fā)環(huán)境支持自動(dòng)更新)
  • 支持自動(dòng)注冊 webman 路由(已經(jīng)寫了 openapi 文檔,再寫一遍 webman Route 是不是多此一舉?)

使用

零配置

安裝完依賴后打開 /openapi 即可訪問 swagger 文檔

默認(rèn)掃描整個(gè) app_path()

之后在 Controller 寫對應(yīng)的注解即可,參考 zircote/swagger-php petstore.swagger.io

修改 @OA\Info 等全局的配置

第一種:通過添加注釋的方式修改

<?php

namespace app\swagger;

use OpenApi\Annotations as OA;

/**
 * @link https://swagger.io/specification/#info-object
 * @OA\OpenApi(
 *     @OA\Info(version="1.0.0", title="My App"),
 *     @OA\Server(url="/api", description="localhost"),
 * )
 */
class OpenapiSpec
{
}

第二種:通過 modify 的方式修改(建議:因?yàn)檫@種方式支持更加復(fù)雜和動(dòng)態(tài)的配置)

以下 openapi_doc 支持配置在 全局 和 應(yīng)用級別(見 配置說明

use OpenApi\Annotations as OA;

'openapi_doc' => [
    'modify' => function(OA\OpenApi $openApi) {
        $openApi->info->title = 'My App';
        $openApi->info->version = '1.0.0';

        $openApi->servers = [
            new OA\Server(['url' => '/api', 'description' => 'localhost']),
        ];
    }
]

限制訪問

為了保證接口文檔的安全性,不應(yīng)該讓接口暴露在公網(wǎng)環(huán)境下

默認(rèn) host_forbidden 開啟,僅內(nèi)網(wǎng)環(huán)境下可訪問,見 HostForbiddenMiddleware

可以通過配置 app.php 中的 host_forbidden enable => false 來全局關(guān)閉

多應(yīng)用支持

默認(rèn)通過配置 app.php 中的 global_route 配置會(huì)啟用全局的掃描 app_path() 的文檔,
可以通過設(shè)置 enable => false 來關(guān)閉

在需要的地方通過 (new Swagger())->registerRoute() 來手動(dòng)注冊文檔路由

如:

<?php

use Webman\Route;
use WebmanTech\Swagger\Swagger;

Route::group('/api1', function () {
    (new Swagger())->registerRoute([
        'route_prefix' => '/openapi',
        'openapi_doc' => [
            'scan_path' => app_path() . '/controller/api1',
        ],
    ]);

    Route::get('/test', [\app\controller\Test::class, 'index']);
});

Route::group('/api2', function () {
    (new Swagger())->registerRoute([
        'route_prefix' => '/my-doc',
        'openapi_doc' => [
            'scan_path' => app_path() . '/controller/api2',
        ],
    ]);

    Route::get('/test', [\app\controller\Test::class, 'index']);
});

如此配置,支持通過 /api1/openapi 訪問 api1 的文檔,/api2/my-doc 訪問 api2 的文檔

配置說明

很多配置都支持全局(多應(yīng)用共享)、應(yīng)用級別(僅當(dāng)前應(yīng)用生效)

app.php 中的配置是全局的

(new Swagger())->registerRoute($config) 中的傳參 $config 是應(yīng)用級別的

webman 路由自動(dòng)注冊

在 config 的 app.php 中修改 register_webman_route 為 true 即可自動(dòng)注冊 webman 路由

參考

webman 使用 swagger 示例:注解模式的 crud

webman 使用 swagger 示例:多 swagger 文檔

贊助商