搜索

查看: 3178|回复: 11

[PHP] PHP使用Swagger生成好看的API文档

[复制链接]
发表于 2023-5-4 17:04:03 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:04:03 3178 11 看全部
目录
  • 一、安装swagger-php
  • 二、设置一个输出api文档数据的接口
  • 三、使用
  • 四、显示swagger uiPHP使用Swagger生成好看的API文档不是不可能,而是非常简单。
    首先本人使用Laravel框架,所以在Laravel上安装swagger-php。

    一、安装swagger-php
    composer require zircote/swagger-php
    swagger-php提供了命令行工具,所以可以全局安装,然后把工具的路径加到PATH里去。
    composer global require zircote/swagger-php
    然后把zircote/swagger-php/bin 目录加到PATH里。这个东西本人用不到,就不研究了。

    二、设置一个输出api文档数据的接口
    a)、生成一个控制器: SwaggerController
    b)、添加一个方法: getJSON()
        public function getJSON()
        {
            $swagger = \OpenApi\Generator::scan([app_path('Http/Controllers/')]);
            return response()->json($swagger, 200);
        }
    有的文章里写 \Swagger\scan(),但我这里报错,说找不到这个类。查了官方文档,要用 \OpenApi\Generator::scan()。有可能是新版本做了修改。
    c)、设置路由
    api.php 或者 web.php都行,路径不同而已。本人选择api.php。所以访问路径要加个前缀:/api。
    Route::group(['prefix' => 'swagger'], function () {
        Route::get('json', [\App\Http\Controllers\SwaggerController::class, 'getJSON']);
    });
    d)、测试访问
    访问 http://localhost:8000/api/swagger/json 如果看到页面正常输出json,说明配置成功了。不然就按错误提示一项项去修改吧。

    三、使用
    GET方法
        /**
         * @OA\Get(
         *     tags={"数据管理"},
         *     summary="数据查询",
         *     path="/api/data/search",
         *     @OA\Response(response="200", description="Display a listing of projects."),
         *     @OA\Parameter(
         *         description="数据名称",
         *         in="query",
         *         name="name",
         *         required=false,
         *         @OA\Schema(type="string"),
         *     ),
         *     @OA\Parameter(
         *         description="状态",
         *         in="query",
         *         name="status",
         *         required=false,
         *         @OA\Schema(type="integer"),
         *     ),
         *     @OA\Parameter(
         *         description="每页记录数",
         *         in="query",
         *         name="page-size",
         *         required=false,
         *         @OA\Schema(type="integer"),
         *     ),
         *     @OA\Parameter(
         *         description="当前页码",
         *         in="query",
         *         name="current-page",
         *         required=false,
         *         @OA\Schema(type="integer"),
         *     ),
         * )
         */
    这里面:
    in 表示该参数出现在哪里。 query的话就是用&拼在url后面; path 类似于 /api/data/search/{param} ; header就是包含在 request header里;cookie 自然是放在cookie里。
    这个版本里formData, body这些都没有了。
    required 看名字就知道 true是必填项,false是选填项。
    POST方法
        /**
         * @OA\Post(
         *     tags={"数据管理"},
         *     summary="添加数据",
         *     path="/api/data",
         *     @OA\Response(response="200", description="Display a listing of projects."),
         *     @OA\RequestBody(
         *         @OA\MediaType(
         *             mediaType="x-www-form-urlencoded",
         *             @OA\Schema(
         *                 ref="#/components/schemas/DataModel",
         *             ),
         *         ),
         *     ),
         * )
         */
    因为本人的前端代码post都是表单提交,所以这里的post方法要用@OA\RequestBody。
    @OA\Parameter是参数,是可以放到url上,但是post的表单提交,数据是不出现在url上的。
    @OA\MediaType 这个: x-www-form-urlencoded 表单提交;application/json 提交json格式的数据;multipart/form-data 文件上传;
         *             @OA\Schema(
         *                 ref="#/components/schemas/DataModel",
         *             ),
    这个是关联到一个已经定义好的schema上,省得使用相同数据的每个接口注释里都写一遍。
    这里也可以单独写:
    * @OA\Schema(
    *   required={"name", "code"},
    *   @OA\Property(property="name", type="string", title="姓名", description="这是姓名"),
    *   @OA\Property(property="code", type="string", title="代码", description="这是代码"),
    *   @OA\Property(property="phone", type="string", title="电话", description="这是电话"),
    * ),
    上面这样,有多少个参数就写多少个@OA\Property。
    这里的required是个数组,写在里面的都是必填项。
    其它方法都差不多,以后有用到了再记录。

    四、显示swagger ui
    下载swagger ui的代码: https://github.com/swagger-api/swagger-ui/releases
    解压后,把目录里的dist目录,复制到laravel的public目录下面,改名为swagger-ui。文件名随便取,不冲突就行。
    找开这个swagger-ui目录下的swagger-initializer.js,内容大概如下:
    window.onload = function() {
      //
      // the following lines will be replaced by docker/configurator, when it runs in a docker-container
      window.ui = SwaggerUIBundle({
        url: "/api/swagger/json",
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      });
      //
    };
    主要是改 url这项。改成前面设的路由地址。这里是 "/api/swagger/json"。
    完成后访问 http://localhost:8000/swagger-ui/ 就能看到swagger形成的api文档了。
    到此这篇关于PHP使用Swagger生成好看的API文档的文章就介绍到这了,更多相关PHP Swagger内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-28 18:02:06 | 显示全部楼层
    知足常乐77 2023-6-28 18:02:06 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    发表于 2023-6-28 22:22:58 | 显示全部楼层
    掌舵的鱼1987 2023-6-28 22:22:58 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-29 17:59:31 | 显示全部楼层
    墙和鸡蛋 2023-6-29 17:59:31 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-6-29 18:56:17 | 显示全部楼层
    尘埃416 2023-6-29 18:56:17 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-30 14:23:35 | 显示全部楼层
    ffycxyw2274436 2023-6-30 14:23:35 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    发表于 2023-6-30 16:16:58 | 显示全部楼层
    当当当当裤裆坦 2023-6-30 16:16:58 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-6-30 20:18:24 | 显示全部楼层
    丁侦球 2023-6-30 20:18:24 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-30 22:29:30 | 显示全部楼层
    123456809 2023-6-30 22:29:30 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-7-1 00:49:44 | 显示全部楼层
    小妖花满楼满fx 2023-7-1 00:49:44 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表