一 前言

这篇文章主要是带大家入门下如何使用OpenAPI, 笔者在github上找到对应得swagger项目都没找到javase得人门文章,看了下是基于JAX-RS,吐血了;

二 什么是 OpenAPI,

OpenAPI 是 一种基于Resful 风格 对 API进行格式化描述的一种规范; 允许你描述你整个项目的API,简单的讲就是一种接口文档生成的规范;包括如下几点 :

  1. 端点描述(如 GET /user , Post /user);
  2. 操作的参数,入输入参数,输出参数;
  3. 认证信息
  4. 联系信息,许可条款,声明等

OpenAPI 3.0 Specification

三 什么是 Swagger

Swagger 由多个组件组成,它是一个开源的构建工具,其作用就是以 OpenAPI 为 规范基准, 能够帮助开发人员设计,构建文档,测试接口,文档规范化,和消费掉Restful API;说白了就是 OpenAPI 的实现,能够生成接口文档,以后不用自己手写了!!! 我们可以看下其主要组件如下:

  1. Swagger Editor 是一个编辑工具,可以编辑描述API;
  2. Swagger UI 能让OpenAPI呈现出规范的可交互的API文档,以供他人查阅;
  3. Swagger Codegen 基于OpenAPI规范 能够生成客户端类库,服务端文档和存根,并且支持多语言,支持使用Docker,jar等方式运行构建;

更多组件详细看官网:swagger doc,看了官网的ylm格式基本结构晕,一堆黑的,客户体验非常不友好吐槽一下!看了github是基于JAX-RS 应用 ,不是很懂,再吐槽一下;

四 API生成

4.1 相关注释

4.2 pom.xml

<dependencies><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>1.5.22</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId><version>1.5.22</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version><optional>true</optional></dependency></dependencies>

4.3 swagger配置

主要是配置一些项目得基本信息,注解路径,项目主要联系人等;比较重要是@EnableSwagger2表示开启Swagger;

/*** @Author lsc* <p> swagger 配置 </p>*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket createRestApi() {// 构建文档Docket docket = new Docket(DocumentationType.SWAGGER_2);// 文档信息Docket build = docket.apiInfo(apiInfo())// 查询.select()// 注解包的路径.apis(RequestHandlerSelectors.basePackage("com.zszxz.swagger.controller"))// 任何路径.paths(PathSelectors.any()).build();return build;}/* ** @Author lsc* <p> 文档信息</p>* @Param []* @Return springfox.documentation.service.ApiInfo*/private ApiInfo apiInfo() {// 文档对象构建器ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();// 文档标题ApiInfo apiInfo = apiInfoBuilder.title("知识追寻者(公众号) API doc")// 描述信息.description("知识追寻者第一次操作OpenAPI!!!!!")// 版本号.version("v1")// 联系人.contact(new Contact("知识追寻者", "https://blog.csdn.net/youku1327", "lsc50534314@gmail.com"))// 声明许可.license("知识追寻者许可")// 许可路径,这边是我的github.licenseUrl("https://github.com/zszxz").build();return apiInfo;}
}

4.4 实体

/*** @Author lsc* <p> </p>*/
@Data
@ApiModel(description = "用户知识追寻者实体")
public class ZSZXZ {@ApiModelProperty(value = "姓名",dataType = "String")private String name;@ApiModelProperty(value = "邮件",dataType = "String")private String email;@ApiModelProperty(value = "爱好",dataType = "String")private String hobby;
}

4.5 controller

/*** @Author lsc* <p> </p>*/
@RestController
// 资源信息
@Api(value = "知识追寻者文档API")
public class SwaggerController {// 方法注释@ApiOperation(value = "获取用户")// 响应信息@ApiResponse(code = 200,message = "获取用户列表成功")@GetMapping("zszxz")public ResponseEntity getUser(){ZSZXZ zszxz = new ZSZXZ();zszxz.setName("知识追寻者");zszxz.setHobby("爱睡觉");zszxz.setEmail("不告诉你");return ResponseEntity.ok(zszxz);}// 方法注释@ApiOperation(value = "跟据用户编号获取用户")// 响应信息@ApiResponses({@ApiResponse(code = 200,message = "获取用户列表成功"),@ApiResponse(code = 204,message = "没有内容")})// 参数信息@ApiImplicitParam(name = "id", value = "用户编号", dataType = "ZSZXZ",required = true, paramType = "path")@GetMapping("zszxz/{id}")public ResponseEntity getUserById(@PathVariable Long id){ZSZXZ zszxz = new ZSZXZ();zszxz.setName("知识追寻者");zszxz.setHobby("爱睡觉");zszxz.setEmail("不告诉你");return ResponseEntity.ok(zszxz);}@PostMapping("zszxz")// 响应信息@ApiResponse(code = 201,message = "添加用户列表成功")// 方法信息@ApiOperation(value = "添加用户")public ResponseEntity addUser(@RequestBody ZSZXZ zszxz){System.out.println("save the user:"+zszxz);return ResponseEntity.ok("success save the user");}// 响应信息@ApiResponse(code = 200,message = "修改用户成功")@ApiOperation(value = "修改用户",notes = "修改用户")@PutMapping("zszxz/{id}")// 参数信息 多个参数使用注释中得内容, @RequestBody 修斯参数没必要写/*@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户编号", dataType = "Long",required = true,paramType = "path"),@ApiImplicitParam(name = "user", value = "用户", dataType = "ZSZXZ",required = true, paramType = "json")})*/@ApiImplicitParam(name = "id", value = "用户编号", dataType = "Long",required = true,paramType = "path")public ResponseEntity updateUser(@PathVariable Long id ,@RequestBody ZSZXZ zszxz){System.out.println("update the user:"+zszxz);return ResponseEntity.ok("success update the user,the number is :"+id);}// 响应信息@ApiResponses({@ApiResponse(code = 200,message = "删除用户成功"),@ApiResponse(code = 401,message = "没有权限")})@ApiOperation(value = "删除用户")@DeleteMapping("zszxz/{id}")@ApiImplicitParam(name = "id", value = "用户编号", dataType = "Long",required = true,paramType = "path")public ResponseEntity updateUser(@PathVariable Long id ){System.out.println("delete the user :"+id);return ResponseEntity.ok("delete the user :"+id);}}

4.6 生成结果

默认路径:localhost:8080/swagger-ui.html#/

4.7 查看实体

4.8 查询接口测试

打开测试查询接口:

测试结果:

4.9 添加用户测试

由于注解时偷懒没加example,所以这边测试要自己动手写测试数据;

测试结果如下

五 结语

修改和删除就不测试了,很简单,读者自行测试;基本常用得注解使用都过了,其余得读者自行研究,总体来说使用还是很愉快,默认文档路径是可以修改得,读者自行搜索;源码请看作者博客专栏说明;

没有required_springboot-使用OpenAPI之后我再也没有写过接口文档相关推荐

  1. curl -s http://192.168.232.191/openapi/v2 | jq 不显示JSON格式的文档说明

    在学习<kubernetes权威指南>(第五版)时,按照书上的教程复现,会出现一些意外的问题.这里汇总行地记录一下: 环境:ubuntu18.04 k8s版本:v1.15.11 问题: 在 ...

  2. 后端接口没完成?只有接口文档怎么办?3分钟教会你mockjs让你快后端一整年,再也不用等后端

    在工作中,常常会出现接口文档写好了,但是后端数据并没有完成 这时候我们前端想要开始工作就必须耐心等待后端写完数据把接口给我们才可以开展工作 相当的不爽,凭什么要看后端脸色行事 所以就有了mockjs ...

  3. DRF自动生成OpenAPI文档

    DRF自动生成OpenAPI文档 API schemas是非常有用的,可以帮助我们生成接口文档以及可与API交互的动态客户端.Django REST Framework支持自动生成OpenAPI sc ...

  4. 再也不写个人日记了,再也...

    再也不写个人日记了,再也... 原因很明显,自己坚持不下来. 只有大学的时候,坚持每天记账,坚持了2年,时而坚持每一天,时而断断续续. 2018计划执行日记-1月份 ----------------- ...

  5. c++ 在哪里找文档来看_FPX双C十四连败引热议!Doinb:我再也不跟LWX双排了

    伴随着德玛西亚杯即将开赛,虽说Nuguri并没有出现在德杯的大名单上,但为了LPL的新赛季,FPX也是在这段时间内进入了备战期.而除了打训练赛之外,FPX的其他成员也是每天通过排位来保持自己的竞技状态 ...

  6. 万能的Entry,两个变量的Model/JavaBean再也不用写了!

    2019独角兽企业重金招聘Python工程师标准>>> 前言 很多时候传数据需要只含两个变量的Model/JavaBean,但就为了两个变量去写一个Model/JavaBean实在是 ...

  7. lombok快速入门:实体类中再也不用写setter和getter,toString等方法了

    1.默认情况下的实体类代码如下 package bean;public class Student {private int sid;private String sname;private Stri ...

  8. wireshark一招掌握如何过滤想要的数据再也不用查找天书般的说明文档

    使用wireshark最令人苦恼的就属那令人头疼的设置过滤条件了,老是记不住怎么办,其实设计wireshark的大佬已经留了后门,或者说是留了获取对应过滤设置的方法获取的方式 你想要过滤哪些内容,只需 ...

  9. 保存的图数据丢失_自从用了这2个功能,再也没有担心过文档丢失

    Hi~大家好,我是 WPS 君. 不知道大家用电脑编辑文档时,有没有遇见下面 2 种情况: ❶ 电脑意外宕机.软件闪退,导致文档数据丢失 ❷ 文件来回修改保存,历史版本太多,没法分清 讲真的,以前每次 ...

最新文章

  1. 某生鲜电商平台的监控模块设计
  2. dubbo基础使用入门
  3. set在python中什么意思_python中set是什么意思
  4. R语言实战-统计分析基础-描述性统计4-psych-describe
  5. Java Trie字典树,前缀树
  6. python 爬虫 爬取序列博客文章列表
  7. SpringMVC路径匹配规则AntPathMatcher(转)
  8. SDUT 3258 Square Number 简单数学
  9. JavaScript 面向对象编程(二) —— 构造函数 / 原型 / 继承 / ES5 新增方法
  10. osgi java web_在Tomcat中使用Java Web应用程序的OSGi软件包
  11. 全球五十家知名传感器制造商分布盘点、特点分析
  12. java------jdkd的安装与配置变量环境
  13. 【论文】写毕业论文过程中遇到的问题及解决方式记录
  14. 什么是上行带宽,什么是下行带宽
  15. eax, ebx, ecx, edx, esi, edi, ebp, esp
  16. 2020机修钳工(中级)考试及机修钳工(中级)复审模拟考试
  17. oracle将表导入到表空间,关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)...
  18. STM32模拟读卡器,对于工控机方案谨防踩坑
  19. 【python】 程序设计基础
  20. 自建API接口管理平台的产品脑图和解决方案

热门文章

  1. SOL注入——基于联合查询的数字型GET注入(二)
  2. 自动化测试用java还是python_现在自动化测试用Java好还是Python好?
  3. android https bks,如何将.cer转换为BKS
  4. linux 流量 脚本,linux 检测网络出入流量 当达到一定量时 自动执行另一个脚本。...
  5. oracle alter_log,在线查看alter.log文件内容
  6. 每周分享第 19 期(20190426)
  7. Python 单元测试(unittest)
  8. Systemd-CentOS7系统服务介绍与CentOS6服务对比
  9. 附一张css hack
  10. rsync同步服务配置手记