swagger api文档_带有Swagger的Spring Rest API –创建文档

swagger api文档

使REST API易于使用的真正关键是好的文档。 但是,即使您的文档做得很好,您也需要设置公司流程的权利以正确,及时地发布它。 确保利益相关者按时收到是一回事,但是您也要负责API和文档中的更新。 自动完成此过程可轻松解决问题,因为您的文档不再是静态交付的,而变成了活物。 在之前的文章中,我讨论了如何将Swagger与带有Jersey的Spring应用程序集成。 现在该向您展示如何创建文档并将其发布给其他人查看。

在深入了解实际文档之前,让我们先从一些有关其形式和属性的注释开始。 我们将使用批注向我们的API提供元数据,从而回答问题的方式。 但是为什么呢? 一方面,我们正在为已经存在注释的地方(例如API端点或控制器)提供新的注释(与Spring MVC集成的情况下)。 但另一方面,这种方法在一次交付中绑定应用程序,API和文档的发布周期方面具有突出的优势。 使用这种方法,我们可以创建和管理小的内聚单元,从而确保对文档及其版本进行适当的分段。

创建端点文档

一切都从端点开始。 为了使Swagger知道您的端点,您需要使用@Api注释对您的类进行注释。 基本上,您要做的就是命名端点并为用户提供一些说明。 这正是我在以下代码段中所做的。 如果您需要使用API​​文档进行更详细的介绍,请查看下面的@Api注释说明。

package com.jakubstas.swagger.rest;/*** REST endpoint for user manipulation.*/
@Api(value = "users", description = "Endpoint for user management")
@Path("/users")
public class UsersEndpoint {...
}

要验证结果,只需从basePath变量中输入URL,然后在浏览器中输入/api-docs 。 这是API资源清单所在的地方。 您可以期待类似于以下注释的内容,这些注释是在注释了三个端点并访问http://[hostname]:[port]/SpringWithSwagger/rest/api-docs/

{"apiVersion":"1.0","swaggerVersion":"1.2","apis":[{"path":"/users","description":"Endpoint for user management"},{"path":"/products","description":"Endpoint for product management"},{"path":"/employees","description":"Endpoint for employee listing"}]
}

但是,请注意,为了使API出现在API列表中,您必须至少使用Swagger注释对API方法进行注释。 如果您的方法均未注释(或您尚未提供任何方法),则将不处理和发布API文档。

@Api批注

描述顶级API。 具有@Api批注的类将包含在资源列表中。

注释参数:

  • value – Api的简短说明
  • description -此类的一般描述
  • basePath –所有@Path元素之前的基本路径
  • position –资源清单中此Api的可选显式排序
  • produces -此Api produces内容类型
  • consumes –此Api consumes媒体类型
  • protocols –此Api所需的协议(即https)
  • authorizations -此Api所需的授权

运营文件

现在,让我们继续API文档的关键部分。 操作文档基本上有两个主要部分-操作描述和响应描述。 让我们从操作说明开始。 使用注释@ApiOperation提供了某些方法的详细说明,其响应,HTTP方法以及下面注释说明中提供的其他有用信息。 在以下代码示例中可以看到Swagger的操作声明示例。

@ApiOperation批注

描述针对特定路径的操作或通常为HTTP方法。 具有等效路径的操作在Api声明的数组中分组。

注释参数:

  • value –操作的简要说明
  • notes –操作的详细说明
  • response –操作中的默认响应类
  • responseContainer –如果响应类在容器内,请在此处指定
  • tags –目前尚未在阅读器中实现,保留以备将来使用
  • httpMethodHTTP方法,即GETPUTPOSTDELETEPATCHOPTIONS
  • position –允许在Api声明中对操作进行显式排序
  • nickname –操作的昵称,以覆盖注释扫描程序检测到的昵称
  • produces -此Api produces内容类型
  • consumes –此Api consumes媒体类型
  • protocols –此Api所需的协议(即https)
  • authorizations -此Api所需的授权

您可能会注意到@ApiOperation批注中使用了response参数,该参数指定了操作的响应类型(返回类型)。 如您所见,该值可以与方法返回类型不同,因为它仅用于API文档。

@GET
@Path("/{userName}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Returns user details", notes = "Returns a complete list of users details with a date of last modification.", response = User.class)
@ApiResponses(value = {@ApiResponse(code = 200, message = "Successful retrieval of user detail", response = User.class),@ApiResponse(code = 404, message = "User with given username does not exist"),@ApiResponse(code = 500, message = "Internal server error")}
)
public Response getUser(@ApiParam(name = "userName", value = "Alphanumeric login to the application", required = true) @PathParam("userName") String userName) {...
}

接下来,看看@ApiParam 。 向客户描述您需要什么来满足他们的要求总是很有用的。 这是@ApiParam批注的主要目的。 无论您使用的是路径还是查询参数,都应始终提供此参数代表的含义。

@ApiParam批注

表示Api操作中的单个参数。 参数是操作的输入。

注释参数:

  • name –参数名称
  • value –参数说明
  • defaultValue –默认值–如果没有给出JAX-RS @DefaultValue
  • allowableValues –该端点接受的值的描述
  • required –指定参数是否为必需
  • access –指定一个可选的访问值,以在Filter实现中进行Filter 。 如果用户无权访问某些参数,则可以隐藏这些参数
  • allowMultiple –指定参数是否可以提供多个值

最后,让我们看一下用消息和HTTP代码记录实际方法响应的方式。 Swagger带有@ApiResponse批注,当使用@ApiResponses包装器@ApiResponses包装时,可以多次使用。 这样,您可以覆盖代码的所有替代执行流程,并为API的客户端提供完整的API操作说明。 每个响应都可以用HTTP返回码,结果描述和结果类型来描述。 有关@ApiResponse更多详细信息,请参见下面的描述。

@ApiResponse批注

ApiResponse表示来自服务器的一种响应。 这可以用来描述成功代码以及错误。 如果您的Api具有不同的响应类别,则可以在此处通过将响应类别与响应代码相关联来描述它们。 注意,Swagger不允许单个响应代码使用多种响应类型。

注释参数:

  • code –描述的响应代码
  • message –响应中的人类可读消息
  • response –描述消息有效负载的可选响应类

使用这些注释非常简单,并提供了结构良好的方法来描述API的功能。 如果要检查文档的外观,只需将@Api批注中的参数value的值附加到指向资源列表的URL上,输入指向端点之一的API文档的URL。 注意不要输入错误的@Path注释值(除非它们具有相同的值)。 在我的示例中,所需的URL是http://[hostname]:[port]/SpringWithSwagger/rest/api-docs/users 。 您应该能够看到类似于以下代码片段的输出:

{  "apiVersion":"1.0","swaggerVersion":"1.2","basePath":"http://[hostname/ip address]:[port]/SpringWithSwagger/rest","resourcePath":"/users","apis":[  {  "path":"/users/{userName}","operations":[  {  "method":"GET","summary":"Returns user details","notes":"Returns a complete list of users details with a date of last modification.","type":"User","nickname":"getUser","produces":[  "application/json"],"authorizations":{  },"parameters":[  {  "name":"userName","description":"Alphanumeric login to application","required":true,"type":"string","paramType":"path","allowMultiple":false}],"responseMessages":[  {  "code":200,"message":"Successful retrieval of user detail","responseModel":"User"},{  "code":404,"message":"User with given username does not exist"},{  "code":500,"message":"Internal server error"}]}]}],"models":{"User":{"id":"User","properties": {"surname":{"type":"string"},"userName":{"type":"string"},"lastUpdated":{"type":"string","format":"date-time"},"avatar":{"type":"array","items":{"type":"byte"}},"firstName":{"type":"string"},"email":{"type":"string"}}}}
}

创建模型文档

通过向前面的示例中的几个批注的响应参数提供User类,我设法在API文档中引入了新的未记录元素。 Swagger能够提取有关User类的所有结构性数据,而无需考虑其与API的相关性。 为了抵消这种影响,Swagger提供了两个注释,以向API用户提供其他信息并限制模型的可见性。 要标记由Swagger处理的模型类,只需将@ApiModel放在类的顶部。 与往常一样,您可以提供描述以及继承配置。 有关更多信息,请参见下面的@ApiModel描述。

@ApiModel批注

REST-api中使用的bean类。 假设您有一个接口@PUT @ApiOperation(...) void foo(FooBean fooBean) ,没有直接的方法来查看FooBean将具有哪些字段。 此批注旨在描述FooBean ,然后使用@ApiModelProperty字段进行批注。

注释参数:

  • value –提供此类的提要
  • description –提供对该类的详细说明
  • parent –为模型提供超类,以允许描述继承
  • discriminator –对于具有基类的模型,可以为多态用例提供鉴别符
  • subTypes

您需要做的最后一件事是使用@ApiModelProperty注释对类成员进行注释,以为每个类成员提供文档。 在下面的类中可以看到一个简单的例子。

package com.jakubstas.swagger.model;@ApiModel
public class User {private String userName;private String firstName;private String surname;private String email;private byte[] avatar;private Date lastUpdated;@ApiModelProperty(position = 1, required = true, value = "username containing only lowercase letters or numbers")public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@ApiModelProperty(position = 2, required = true)public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}@ApiModelProperty(position = 3, required = true)public String getSurname() {return surname;}public void setSurname(String surname) {this.surname = surname;}@ApiModelProperty(position = 4, required = true)public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@JsonIgnorepublic byte[] getAvatar() {return avatar;}public void setAvatar(byte[] avatar) {this.avatar = avatar;}@ApiModelProperty(position = 5, value = "timestamp of last modification")public Date getLastUpdated() {return lastUpdated;}public void setLastUpdated(Date lastUpdated) {this.lastUpdated = lastUpdated;}
}

如果您需要提供有关模型的更多详细信息,请检查@ApiModelProperty以下描述:

@ApiModelProperty批注

ApiModelProperty描述了模型类中的属性。 根据模型扫描器的配置和使用方式,注释可以应用于方法,属性等。

注释参数:

  • value –提供此属性的易于理解的提要
  • allowableValues –如果可以设置的值受到限制,则可以在此处设置它们。 以逗号分隔的列表形式registered, active, closed
  • access –指定一个可选的访问值,以在Filter实现中进行Filter 。 如果用户无权访问某些参数,则可以隐藏这些参数
  • notes –物业的详细说明
  • dataType –数据类型。 请参阅文档以获取受支持的数据类型。 如果数据类型是自定义对象,请设置其名称,或不设置任何名称。 如果是枚举,请为枚举常量使用'string'和allowableValues
  • required –是否required该属性,默认为false
  • position –允许在模型中显式排序属性。 由于反射不能保证顺序,因此应指定属性顺序,以使模型在不同的VM实现和版本之间保持一致

如果您认真遵循这些说明,那么您最终应该获得前面提到的URL上json中完整的API文档。 以下仅是结果json中与模型相关的部分,现在提供了说明文件。

{..."models":{  "User":{  "id":"User","description":"","required":[  "userName","firstName","surname","email"],"properties":{  "userName":{  "type":"string","description":"username containing only lowercase letters or numbers"},"firstName":{  "type":"string"},"surname":{  "type":"string"},"email":{  "type":"string"},"lastUpdated":{  "type":"string","format":"date-time","description":"timestamp of last modification"}}}}
}

接下来是什么?

如果按照所有步骤进行操作,您现在应该已经可以使用的API文档,自动化工具可能会发布这些API文档或对其进行进一步处理。 在我的下一篇名为Swagger的Spring Rest API –公开文档中,我将展示如何使用Swagger UI模块展示API文档。 该微型系列中使用的代码在GitHub上发布,并提供了所有讨论的功能和工具的示例。 请享受!

翻译自: https://www.javacodegeeks.com/2014/10/spring-rest-api-with-swagger-creating-documentation.html

swagger api文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程队列的算法优化

【导读】:本文主要讲解多线程队列的优化。多线程队列(Concurrent Queue)的使用场合非常多,高性能服务器中的消息队列,并行算法中的Work Stealing等都离不开它。对于一个队列来说有两个最主要的动作:添加&am…

购买台式计算机方案,购买电脑的注意事项有哪些?

随着电脑的应用与普及,电脑已经逐渐成为人们学习、工作、生活中不可缺少的工具。同时,电脑的价格在逐渐下降,很多用户开始准备选购自己的电脑。选购电脑要考虑用户的需求、价格承受能力、商家服务质量等。1、明确用户需求购买电脑之前&#x…

linux 文件大小_整理 | Linux下列出目录内容命令

IT服务圈儿有温度、有态度的IT自媒体平台来源:良许Linux(ID:liangxuxiansheng)在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命…

mysql caching_Spring Caching抽象和Google Guava Cache

mysql cachingSpring为缓存昂贵的方法调用提供了强大的现成支持。 这里详细介绍了缓存抽象。 我的目标是使用Spring Guava Cache涵盖Spring现在提供的4.0版本的较新的缓存实现之一。 简而言之,请考虑一种具有几种慢速方法的服务: public class DummyB…

多线程程序中操作的原子性

0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多…

2018秋计算机基础在线作业华师,18秋华师《计算机基础》在线作业3(标准答案).doc...

【奥鹏】[华中师范大学]华师《计算机基础》在线作业试卷总分:100 得分:100第1题,控制面板可实现__________。A、对计算机全面控制操作B、对硬件驱动、软件设置及Windows外观设置C、计算机的关闭操作D、删除计算机中的任意文件正确答案:B第2题,页眉和页脚的建立方法相似&#xf…

.net mvc actionresult 返回字符串_ASP.NET Core中的Action的返回值类型

在Asp.net Core之前所有的Action返回值都是ActionResult,Json(),File()等方法返回的都是ActionResult的子类。并且Core把MVC跟WebApi合并之后Action的返回值体系也有了很大的变化。ActionResult类ActionResult类是最常用的返回值类型。基本沿用了之前Asp.net MVC的那…

.jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API

.jdeveloper介绍 最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上,从12.1.2.0版本开始就支持WebSocket协议(RFC 645…

为什么程序员需要关心顺序一致性,而不是 Cache 一致性?

本文所讨论的计算机模型是Shared Memory Multiprocessor,即我们现在常见的共享内存的多核CPU。本文适合的对象是想用C 或者Java进行多线程编程的程序员。本文主要包括对Sequential Consistency和Cache Coherence的概念性介绍并给出了一些相关例子,目的是…

南科大计算机科学与技术专业如何,广州大学、深圳大学、汕头大学、南方科技大学,如何排名?...

广州大学、深圳大学、汕头大学和南方科技大学都是广东省内的一流大学。为了方便各位广东考生在填报志愿的时候有一个更好的了解,顺哥收集整理了这4所学校的一些信息。希望能帮助到大家。深圳大学2021年校友会排名省内第4,全国第57,中国一流大…

canoco5冗余分析步骤_打造高性能的大数据分析平台

大数据时代,大数据的应用与挖掘,大数据的分析和决策,大数据在经济社会的运行轨道上发挥着愈来愈重要的作用。对于大数据分析,现在好多互联网金融公司和传统的商业银行、证券基金公司都非常看重。个个都想在大数据分析中获得重要信…

C 迭代器iterator的实现原理

在经典的设计模式中,有一种迭代器模式,定义为:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器的主要优点如下:访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器…

html如何在画布上加层,在Canvas中嵌套Html

大概是这样的,现在需要根据一下上传的图片以及一些输入生成图片。本来打算用imagemagick的,但是后来觉得这样前后端要搞两份不同的代码,然后imagemagick使用起来远没有canvas用起来顺手啊。So,最终决定就用Canvas搞定它了&#xf…

如何用illustrator做技术手册_做期货用什么技术指标分析?

来源:期汇股金作者:DC链接:做期货用什么技术指标分析?投资期货市场首先我们要有一套自己的技术分析,那么我们有什么样的技术指标分析最准确呢,没有最准确的技术指标,要看你运用的程度&#xff0…

根据字符串自动构造对应类

问题的起因是,我在做一个demo,有一个对象基类,以及一堆派生出的子对象,比如球体、立方体之类的对象。还有一个对象管理类,用于存储场景中的所有对象。那么在初始化的时候,代码是这么写的:class …

openshift k8s_带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8

openshift k8sDIY盒带是一种实验性盒带,提供了一种在OpenShift上测试不受支持的语言的方法。 它提供了最小限度的自由形式的支架,将墨盒的所有细节留给了应用程序开发人员 。 这篇博客文章说明了结合了PostgreSQL服务的Spring Boot / Java 8 / Tomcat 8应…

都兰县第一中学计算机,都兰县第一中学教案.doc

PAGE \* MERGEFORMATPAGE \* MERGEFORMAT 1都兰县第一中学教案班级初一.班周次9时间45分钟课时2授课教师席得勋教学内容篮球:胸前双手传接球器 材篮球25个、栏架4个、垫子4个、长凳4个、标志桶4个教学目标运动参与目标:通过学习激发学生兴趣,使学生积极参…

.sql文件如何执行_mysql:一条SQL查询语句是如何执行的?

本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句:select * from user_info where id 1;返回结果为:-------------------------------------------…

jooq和jdbc_在jOOQ之上构建的RESTful JDBC HTTP服务器

jooq和jdbcjOOQ生态系统和社区正在持续增长。 我们个人总是很高兴看到基于jOOQ构建的其他开源项目。 今天,我们非常高兴为您介绍BjrnHarrtell结合REST和RDBMS的一种非常有趣的方法。 BjrnHarrtell从小就是瑞典的程序员。 他通常在Sweco Position AB上忙于编写GIS系…

C 虚函数表及多态内部原理详解

C 中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。虚函数表每个含有虚函数的类都…