Skip to content

Commit 008bfa4

Browse files
committed
README
1 parent 3ca30bb commit 008bfa4

File tree

2 files changed

+156
-23
lines changed

2 files changed

+156
-23
lines changed

README.md

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
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+
![](http://pic.ztianzeng.com/20190614224053.png)

apidoc-core/src/test/java/com/ztianzeng/apidoc/test/res/TestController.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,29 @@ public class TestController {
2828
public CreateVO add(@RequestBody @Valid CreateParam createParam) {
2929
return new CreateVO();
3030
}
31-
//
32-
// /**
33-
// * 新增一个实例2
34-
// *
35-
// * @param createParam2 创建对象2
36-
// */
37-
// @PostMapping(value = "/create2")
38-
// public List<CreateVO> create2(@Valid @RequestBody List<CreateParam> createParam2) {
39-
// return new LinkedList<>();
40-
// }
41-
//
42-
// /**
43-
// * 获取一个实例
44-
// *
45-
// * @param userId 用户ID
46-
// * @param sex 性别
47-
// * @return 返回信息
48-
// */
49-
// @GetMapping(value = "/get")
50-
// public Result<CreateVO> get(@RequestParam(value = "userId", required = false) String userId,
51-
// @RequestParam(value = "sex2") String sex) {
52-
// return new Result<>();
53-
// }
31+
32+
/**
33+
* 新增一个实例2
34+
*
35+
* @param createParam2 创建对象2
36+
*/
37+
@PostMapping(value = "/create2")
38+
public List<CreateVO> create2(@Valid @RequestBody List<CreateParam> createParam2) {
39+
return new LinkedList<>();
40+
}
41+
42+
/**
43+
* 获取一个实例
44+
*
45+
* @param userId 用户ID
46+
* @param sex 性别
47+
* @return 返回信息
48+
*/
49+
@GetMapping(value = "/get")
50+
public Result<CreateVO> get(@RequestParam(value = "userId", required = false) String userId,
51+
@RequestParam(value = "sex2") String sex) {
52+
return new Result<>();
53+
}
5454

5555
/**
5656
* 获取一个实例

0 commit comments

Comments
 (0)