当前位置:   article > 正文

swagger入门_swagger php 原理

swagger php 原理

swagger.php

用于生成swagger文件

<?php
namespace app\index\controller;
/**
 * @SWG\Swagger (
 *          schemes={"https","http"},
 *          host="www.tp.cn",
 *          basePath="/",
 *      @SWG\SecurityScheme(securityDefinition="apikey",type="apiKey",name="token",in="header"),
 *      @SWG\Info (
 *          title="API文档",
 *          version="版本0.1",
 *          description="本文档仅限于测试",
 *          termsOfService="服务网址",
 *          @SWG\Contact(
 *              name="张先生",
 *              url="www.kevlin.com",
 *              email="kevlinzhang.china@gmail.com"
 *
 *          ),
 *          @Swg\License(
 *              name="服务名称-异享律师",
 *              url="http://www.yixianglife.com"
 *          )
 *      ),
 *     @SWG\ExternalDocumentation(
 *          description = "Find out more about my website",
 *          url = "http://www.google.com"
 * )
 *
 *
 * )
 */
class Swagger
{
    public function index()
    {
//        echo __DIR__;
//        $swagger =  \Swagger\scan("/www/wwwroot/default/thinkphp/application/index");
        $swagger =  \Swagger\scan("/www/wwwroot/default/thinkphp/application/index");
        $swagger->saveAs('./swagger.json');
        echo "swagger.json保存成功".rand(1,100);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

Controller\Test.php

测试demo

<?php
namespace app\index\controller;

class Test
{
    /**
     * @SWG\Post (
     *     path = "/index/test/index",
     *     tags = {"后台管理"},
     *     summary =  "更新用户信息",
     *     security={{"apikey"={}}},
     *     consumes={"application/json","application/xml"},
     *     produces={"application/json","application/xml"},
     *     description="用户的更新逻辑,记得一定要带`token`",
     *     @SWG\Parameter (name="id",type="integer",in="formData",description="商品的id",required=true),
     *     @SWG\Parameter (name="picture",type="file",in="formData",description="商品图片",required=false),
     *     @SWG\Parameter (
     *          in="body",
     *          required=true,
     *          name="bodyName",
     *          description="body description",
     *          @SWG\Schema(
     *                  @SWG\Property (
     *                       property="username",
     *                       type="string",
     *                       example="kevlin"
     *                    ),
     *                  @SWG\Property (
     *                       property="password",
     *                       type="string",
     *                       readOnly=true
     *                    )
     *          )
     *      ),
     *     @SWG\Response(response=200,description="请求成功",
     *          @SWG\Schema(
     *                  @SWG\Property (
     *                      property="code",
     *                      type="number",
     *                      example=10001
     *                  ),
     *                  @SWG\Property (
     *                      property="msg",
     *                      type="string",
     *                      example="返回成功"
     * ),
     *                  @SWG\Property (
     *                      property="data",
     *                      type="object",
     *                      example={"username"="root","password"="111111"}
     *                  )
     *
     *          )
     *      ),
     *     @SWG\Response(response=201,description="请求失败")
     * )
     */
    public function index()
    {

    }

    /**
     * @SWG\Get  (
     *     path = "/index/test/add",
     *     tags = {"接口标签,可以是多个;设置多个相同的tags值,swagger会自动进行逻辑分组"},
     *     summary =  "接口简介",
     *     description =  "接口描述,支持`markdown`语法",
     *     operationId = "操作的id,需要唯一",
     *     security={{"apikey"={}}},
     *     consumes={"application/json","application/xml"},
     *     produces={"application/json"},
     *     @SWG\Parameter (name="id",type="integer",in="formData",description="商品的id",required=true),
     *     @SWG\Response(response=200,description="请求成功",@SWG\Schema(ref="#definitions/TestModel")),
     *     @SWG\Response(response=201,description="请求失败")
     * )
     */
    public function add()
    {

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82

Model\Test.php

定义模型(抽取重复定义的内容)

<?php
namespace app\index\model;

/**
 * @SWG\Definition (definition="TestModel")
 */
class Test
{
    /**
     * @SWG\Property (example=100001)
     * @var number
     */
    protected $code;
    /**
     * @SWG\Property (example="ok")
     * @var string
     */
    protected $msg;
    /**
     * @SWG\Property (example={"token":"xxxxxxxx"})
     * @var object
     */
    protected $data;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

需要注意的是参数itemscollectionFormat 只有参数type=“array”才使用

当参数 in选择“body”时必须定义@SWG\Schema()schema,通过@SWG\Schema()自定义一个 JSON

Definition请求类型

编写 API 文档时经常会遇到一些 API 的内容是重复的,抽取可以重新定义的内容,定义模型,使用definition来简化我们的文档。

使用@SWG\Property()参数来设置
参数含义
property名称
type类型,可以设置值为number,string,integer,boolean,array,object
example设置默认值
readOnly属性声明

参数readOnly如果设置为true,这意味着它只作为响应的一部分发送,不能作为请求的一部分发送,默认false

Schema请求类型

参数含义
ref允许此路径的外部定义
example设置一个自定义对象
discriminator添加多个自定义的ref的支持

例:

/**
*     @SWG\Schema(example={"username"="username","password"="password"})
*/
  • 1
  • 2
  • 3

参考链接:
入门https://blog.csdn.net/meihuasheng/article/details/118405254

看云:https://www.kancloud.cn/chengguang/swagger-php

我爱学习网:https://www.5axxw.com/wiki/topic/galhwk

laravel5注释

swagger文档

原理:使用zircote读取注释,(使用命令行php ./vendor/zircote/swagger-php/bin/swagger ./vendor/webpower/rest-api/ -o ./public/)生成swagger.json文件(或者yaml文件);然后访问自定义的swagger.php文件(作用:swagger.json生成index.html到swagger-ui的目录中);访问的接口文档就是swagger-ui的界面

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/435443
推荐阅读
相关标签
  

闽ICP备14008679号