Swagger或者叫OpenAPI是一套完备且通用的API标准,本文并不介绍Swagger的用法,仅针对某些场景需要扩展(扩展需要以"x-")该如何开发做紧要的介绍。
一切开始之前,有一点需要keep in mind,即增加扩展的位置不同,所用的方法不同,所以需要对Swagger的标准有所了解,可参考官方文档
springfox目前只允许三种扩展实现:
- ListVendorExtension:列表的形式,该对象支持泛型,最终形式:”x-field”:[{field:value}]
- ObjectVendorExtension:对象的扩展形式,最终的扩展形式是:”x-field”:[{field:value}]
- StringVendorExtension:string类型的扩展实现,最终的扩展形式是”x-field”:”value”
Swagger根对象扩展
以在info中添加一个x-logo为例
"info": {
"description": "<div style='font-size:14px;color:red;'>swagger-bootstrap-ui-demo RESTful APIs</div>",
"version": "1.0",
"title": "swagger-bootstrap-ui!!!",
"termsOfService": "http://www.xxx.com/",
"contact": {
"name": pxxxx@domain.com"
},
"x-logo": {
"url": "http://",
"color": "#090807"
}
},
...
后台代码:
ObjectVendorExtension logo = new ObjectVendorExtension("x-logo");
logo.addProperty(new StringVendorExtension("url", "https://xxx.svg"));
logo.addProperty(new StringVendorExtension("color", "#090807"));
return new ApiInfoBuilder()
.title("swagger-bootstrap-ui!!")
.extensions(Lists.newArrayList(logo))
.description("<div style='font-size:14px;color:red;'>swagger-bootstrap-ui-demo RESTful APIs</div>")
.termsOfServiceUrl("http://www.xxx.com/")
.version("1.0.0")
.build();
内部对象扩展
给Path添加一个扩展属性x-order为例
@Component
@Order(Ordered.HIGHEST_PRECEDENCE+100)
public class OperationPositionBulderPlugin implements OperationBuilderPlugin {
@Override
public void apply(OperationContext context) {
context.operationBuilder().extensions(Lists.newArrayList(new StringVendorExtension("x-order","1")));
}
@Override
public boolean supports(DocumentationType delimiter) {
return true;
}
}
详细介绍可以参考