接口开发

[Swagger] Swagger开发规范

2018-08-25  本文已影响24人  离兮丶斜阳

title: Swagger开发规范 [推荐]
date: 2018-08-18 20:22:00
categories:


Springfox Swagger 和Spring的整合已经让我们可以动态的生成接口文档了,但是接口文档的定义需要遵循一定的规范,才能大大提高项目团队间的接口对接效率。


Swagger开发规范 [推荐]

swagger JSON文档生成

maven-surefire-plugin(指定Swagger测试用例)

notes\env\maven\2018-06-27-maven-surefire-plugin.md

虚拟注入和扫描

notes\spring\components\2018-06-08-springfox-swagger-jenknis.md

接口定义规范

鉴权方式描述

在description中描述该组接口的鉴权方式,可以使用超链接等方式也可以直接在其中说明

能力级描述

/** 在description中描述该组接口的能力集 */
 new ApiInfoBuilder().contact(contact).description("api描述1111").version("1.0").title("标题").build();

联系人信息

/** 在contact中描述联系人信息,接口得有负责人 */
new ApiInfoBuilder().contact(contact).description("api描述1111").version("1.0").title("标题").build();
@Configuration
@EnableSwagger2
public class SwaggerConfig {...}

Controller控制器类(或在接口Interface中定义)

    @Api(value = "API测试", description = "API接口描述,主要作为示例使用", tags = "测试1")

    @Api(value = "API测试", description = "API接口描述,能力1,能力2...", tags = "测试1")

    @ApiOperation(value = "call_1接口", notes = "call_1接口描述", tags = "测试1")

notes描述在pdf中的排版

"\t\tHead: " +
"\t\t\t\t PublicKey -> 公钥\n" +
"\t\t\t\t P -> P参数\n" +
"\t\t\t\t G -> G参数\n" +
"\t\t\t\t Token -> 双向认证令牌\n" +
    @ApiImplicitParams({
        @ApiImplicitParam( value = "姓名", name = "name", required = true, paramType = "query", dataType = "string"),
         @ApiImplicitParam( value = "年龄", name = "age", required = true, paramType = "query", dataType = "int"),
        @ApiImplicitParam( value = "日期", name = "birthday", required = true, paramType = "query", dataType = "date",    defaultValue = "2017-01-01")
 })
    value = "日期", name = "birthday", required = true, paramType = "query", dataType = "date", defaultValue = "2017-01-01"

数据传输对象注解

    @ApiModel(value = "返回数据对象", description = "描述返回数据对象")
    public class Result<T>{}


@ApiModel(value = "返回数据对象", description = "描述返回数据对象")
public class Result<T> {

   @ApiModelProperty(required = true, value = "返回码", dataType = "int", example = "0", position = 0)
   protected int code;

   @ApiModelProperty(required = true, value = "返回信息", dataType = "string", example = "买买买", position = 1)
   protected String message;

   @ApiModelProperty(required = true, value = "其他返回信息", position = 2)
   protected T data;
}
@ApiModel(value = "数据对象", description = "描述返回数据对象")
public Class Dto1{}
    required = true, value = "返回码", dataType = "int", example = "0", position = 0
@ApiModelProperty(required = true, value = "测试自定义名称", dataType = "string", example = "AAACCDSF", position = 3)
@JsonProperty(value = "AAC")
private String AAC;

备注

Swagger接口定义要求明确的出入参的必要性:

1、自动生成接口文档,可以直接生成返回数据体
2、前端开发依赖swagger.json生成的静态Mock Server,可直接模拟构建前端请求返回的数据体。
3、接口说明注解写得越详细,后期联调和前端自主开发都会大大节约时间,这也是前后端分离的初衷。

1、ActionResult的返回数据体以泛型传入

return new ActionResult<Dto1>();

2、泛型支持类型 [ 前提是返回参数明确 ]集合对象包裹的Dto对象

List<Dto1>、List<Map<String,Dto1>>、Map<String,Dto1>、Dto1 { Dto2,Dto3,…}(对象嵌套)

3、不支持以Object形式、JsonObject形式返回参数

接口描述

ApiModelProperty

- 类名(引用路径)

/*如果该类不存在或是直接使用名称[无法通过Class.forName(...)生成],原来的返回类型Original会被保留,*/

@ApiModelProperty(dataType = "com.qualified.ReplacedWith")
public Original getOriginal() { ... }


- baseTypes
     private static final Set<String> baseTypes = newHashSet(
      "int",
      "date",
      "string",
      "double",
      "float",
      "boolean",
      "byte",
      "object",
      "long",
      "date-time",
      "__file",
      "biginteger",
      "bigdecimal",
      "uuid");

微信公众号

架构探险之道

扫码关注或搜索架构探险之道获取最新文章,坚持每周一更,坚持技术分享的我和你们一起成长 _

上一篇下一篇

猜你喜欢

热点阅读