|
| 1 | +# API_DOC 注释生成器 |
| 2 | + |
| 3 | +自动扫描Java上面的代码生成OpenAPI文档,无代码侵入。 |
| 4 | + |
| 5 | +对比与Swageer的代码侵入显得更加简洁。 |
| 6 | + |
| 7 | +## 诞生原因 |
| 8 | + |
| 9 | +在开发的过程中,尤其是联调的过程中,接口出入参的修改是很频繁的一件事。这就导致开发过程中,修改了接口参数缺忘记修改接口文档。 |
| 10 | +因此需要一个工具能够自动读取Java类中的注释来生成文档。 |
| 11 | + |
| 12 | +## 对比Swagger |
| 13 | + |
| 14 | +Springfox的代码侵入性太强了,使得代码一点优雅性都没有,注解上写了说明那还要写注释么? |
| 15 | +而且Springfox的功能太强大,几乎能够生成所有类型的文档,但实际使用中最多的还是使用JSON作为DSL来描述。所以这个项目目前只支持了使用JSON进行出入参描述。XML啥的目前不打算支持。 |
| 16 | + |
| 17 | +## 基本特性 |
| 18 | + |
| 19 | +apidoc最终会把扫描路径下的所有controller解析成OpenApi 3.0协议。 |
| 20 | + |
| 21 | +controller解析:会扫描带有@Controller和@RestController的类。 |
| 22 | + |
| 23 | +URL解析:SpringMvc中定义的基本Mapping |
| 24 | + |
| 25 | +入参解析: 如果使用@RequestBody注解则解析成JSON格式、否则就解析成param格式。 |
| 26 | + |
| 27 | +出参解析:会把所有的类都解析成JSON格式。 |
| 28 | + |
| 29 | + |
| 30 | +## 使用方式 |
| 31 | + |
| 32 | +看下面代码: |
| 33 | +~~~ |
| 34 | + @Test |
| 35 | +public void print() throws ClassNotFoundException, IOException { |
| 36 | + SourceBuilder sourceBuilder = new SourceBuilder(); |
| 37 | +
|
| 38 | + Reader reader = new Reader(new OpenAPI()); |
| 39 | +
|
| 40 | + Set<JavaClass> controllerData = sourceBuilder.getControllerData(); |
| 41 | +
|
| 42 | + OpenAPI openAPI = reader.read(controllerData); |
| 43 | + Info info = new Info(); |
| 44 | + // 标题 |
| 45 | + info.title("dddd"); |
| 46 | + // 版本 |
| 47 | + info.setVersion("111.111"); |
| 48 | +
|
| 49 | + openAPI.setInfo(info); |
| 50 | +
|
| 51 | + Json.pretty("/Users/openAPI.json", openAPI); |
| 52 | +} |
| 53 | +~~~ |
| 54 | + |
| 55 | +由于Java运行限制,目前只能运行在测试脚本或者main方法中。因为扫描注释需要编译前的类,所有不能像Springfox那样运行时生成。 |
| 56 | +有的返回的类可能被打包在其他的jar类,也注定了只能在test或者main中运行。 |
| 57 | + |
| 58 | +### Yapi支持 |
| 59 | + |
| 60 | +apidoc 还提供了插件用于将扫描出来的openApi信息导入到Yapi中。 |
| 61 | +~~~ |
| 62 | +UploadToYapi uploadToYapi = new UploadToYapi("token", "http://127.0.0.1:3000"); |
| 63 | +uploadToYapi.upload(openAPI, true); |
| 64 | +~~~ |
| 65 | + |
| 66 | +## 例子 |
| 67 | + |
| 68 | +展示了一个简单的controller的解析 |
| 69 | +~~~ |
| 70 | +/** |
| 71 | + * 测试控制器 |
| 72 | + * |
| 73 | + * @author zhaotianzeng |
| 74 | + * @version V1.0 |
| 75 | + * @date 2019-05-27 13:22 |
| 76 | + */ |
| 77 | +@RequestMapping("/test") |
| 78 | +@RestController |
| 79 | +public class TestController { |
| 80 | +
|
| 81 | +
|
| 82 | + /** |
| 83 | + * 新增一个实例 |
| 84 | + * |
| 85 | + * @param createParam 创建对象 |
| 86 | + * @return 创建后的信息 |
| 87 | + */ |
| 88 | + @PostMapping(value = "/create") |
| 89 | + public CreateVO add(@RequestBody @Valid CreateParam createParam) { |
| 90 | + return new CreateVO(); |
| 91 | + } |
| 92 | +
|
| 93 | + /** |
| 94 | + * 新增一个实例2 |
| 95 | + * |
| 96 | + * @param createParam2 创建对象2 |
| 97 | + */ |
| 98 | + @PostMapping(value = "/create2") |
| 99 | + public List<CreateVO> create2(@Valid @RequestBody List<CreateParam> createParam2) { |
| 100 | + return new LinkedList<>(); |
| 101 | + } |
| 102 | +
|
| 103 | + /** |
| 104 | + * 获取一个实例 |
| 105 | + * |
| 106 | + * @param userId 用户ID |
| 107 | + * @param sex 性别 |
| 108 | + * @return 返回信息 |
| 109 | + */ |
| 110 | + @GetMapping(value = "/get") |
| 111 | + public Result<CreateVO> get(@RequestParam(value = "userId", required = false) String userId, |
| 112 | + @RequestParam(value = "sex2") String sex) { |
| 113 | + return new Result<>(); |
| 114 | + } |
| 115 | +
|
| 116 | + /** |
| 117 | + * 获取一个实例 |
| 118 | + * |
| 119 | + * @param userId 用户ID |
| 120 | + * @param sex 性别 |
| 121 | + * @return 返回信息 |
| 122 | + */ |
| 123 | + @GetMapping(value = "/get") |
| 124 | + public Result<Result2<CreateParam>> get2(@RequestParam(value = "userId", required = false) String userId, |
| 125 | + @RequestParam(value = "sex2") String sex) { |
| 126 | + return new Result<>(); |
| 127 | + } |
| 128 | +
|
| 129 | +
|
| 130 | +} |
| 131 | +~~~ |
| 132 | + |
| 133 | + |
0 commit comments