- 浏览: 1036548 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
Micro Service工具集之Swagger:可测试的样式化API文档
- 博客分类:
- Java学习
在我之前的一篇博文中,介绍了Yammer开发团队贡献的开源微服务开发框架DropWizard(http://ningandjiao.iteye.com/blog/1766498),有了服务之后,开发者最关心的事情是什么呢? 就是有人用你的服务。而开发者使用一个服务之前,首先需要知道的是该服务的API,目前几乎所有的开放平台都是把API以文档的形式放在网站上,如下:
不知道有没有开发人员和我一样,有时对一些API说明的理解比较模糊,总想着能直接验证一下自己的理解就好了,而不是需要去项目写测试代码来验证自己的想法。即API文档应具备直接执行能力。 Swagger就是这样的一个利器,其实,Swagger本身的目标比上面描述的要大很多:“Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. ”。但是,本文中只想聊聊如何通过Swagger为已有项目的生成具备执行能力的样式化API文档。
为已存在的项目添加Swagger(以DropWizard为例)
首先,为项目引入Swagger依赖包
然后,把Swagger加入DropWizard的Service中:
接着,给开放API的Resource类加上API Annotation,这样上一步配置的Scanner就能够扫描到该Resource开放的API了。
在Swagger Annotation中:
再接着,为项目的Model对象添加Swagger Annotation,这样Swagger Scanner可以获取更多关于Model对象的信息。
通过上面的步骤,项目已经具备了提供Swagger格式的API信息的能力,接下来,我们把这些信息和Swagger UI集成,以非常美观,实用的方式把这些API信息展示出来。
和Swagger UI的集成
首先,从github(https://github.com/wordnik/swagger-ui)上下载Swagger-UI, 把该项目dist目录下的内容拷贝到项目的resources的目录assets下。
然后,修改index.html, 把Swagger UI对象中的URL替换为自己的API路径。
最后,为了能访问到该页面,还需要在Service的Initialize方法中,添加AssetsBundle,
最后的效果图:
swagger-springmvc已经发布到正式仓库,不再是SNAPSHOT了, 你从这儿选一个版本用吧http://mvnrepository.com/artifact/com.mangofactory/swagger-springmvc
1,2:这2部分都是Dropwizard的基础知识: https://dropwizard.github.io/dropwizard/ http://ningandjiao.iteye.com/blog/1766498
2:https://github.com/xianlinbox/DropWizardDemo
thank you! 非常感谢! 我去试试!
1,2:这2部分都是Dropwizard的基础知识: https://dropwizard.github.io/dropwizard/ http://ningandjiao.iteye.com/blog/1766498
2:https://github.com/xianlinbox/DropWizardDemo
不知道有没有开发人员和我一样,有时对一些API说明的理解比较模糊,总想着能直接验证一下自己的理解就好了,而不是需要去项目写测试代码来验证自己的想法。即API文档应具备直接执行能力。 Swagger就是这样的一个利器,其实,Swagger本身的目标比上面描述的要大很多:“Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. ”。但是,本文中只想聊聊如何通过Swagger为已有项目的生成具备执行能力的样式化API文档。
为已存在的项目添加Swagger(以DropWizard为例)
首先,为项目引入Swagger依赖包
'com.wordnik:swagger-jaxrs_2.9.1:1.3.0'
然后,把Swagger加入DropWizard的Service中:
private void initSwaggerConfig(Environment environment) { // Swagger Resource environment.addResource(new ApiListingResourceJSON()); // Swagger providers environment.addProvider(new ApiDeclarationProvider()); environment.addProvider(new ResourceListingProvider()); // Swagger Scanner, which finds all the resources for @Api Annotations ScannerFactory.setScanner(new DefaultJaxrsScanner()); // Add the reader, which scans the resources and extracts the resource information ClassReaders.setReader(new DefaultJaxrsApiReader()); //Config API information. this information will show on the Swagger UI page SwaggerConfig config = ConfigFactory.config(); config.setApiVersion("0.1"); config.setApiPath("/api/api-docs"); //Swagger UI 默认把API信息显示在base_path/api-docs下 config.setBasePath("http://localhost:9090/api"); config.setInfo(Option.apply(new ApiInfo("DropWizard Demo Swagger UI", "This is just a demo to show how to integrate Swagger UI with a dropwizard project.", null, "xianlinbox@gmail.com", null, null))); }
接着,给开放API的Resource类加上API Annotation,这样上一步配置的Scanner就能够扫描到该Resource开放的API了。
@Path("/helloWorld") @Api(value = "/helloWorld", description = "Greeting API", position = 1) @Produces(APPLICATION_JSON) public class HelloWorldResource { private final String template; private final String defaultName; private final AtomicLong counter; public HelloWorldResource(String template, String defaultName) { this.template = template; this.defaultName = defaultName; this.counter = new AtomicLong(); } @GET @Path("/{name}") @ApiOperation(value = "Greeting by Name", notes = "Say hello to the people", response = SayingRepresentation.class, position = 0) @ApiResponses(value = { @ApiResponse(code = 400, message = "No Name Provided") }) @Produces(APPLICATION_JSON) @Timed public SayingRepresentation sayHello(@ApiParam(value = "name for greeting", required = true) @PathParam("name") String name) { return new SayingRepresentation(counter.incrementAndGet(), String.format(template, name != null ? name : defaultName)) ; } }
在Swagger Annotation中:
- @API表示一个开放的API,可以通过description简要描述该API的功能。
- 在一个@API下,可有多个@ApiOperation,表示针对该API的CRUD操作。在ApiOperation Annotation中可以通过value,notes描述该操作的作用,response描述正常情况下该请求的返回对象类型。
- 在一个ApiOperation下,可以通过ApiResponses描述该API操作可能出现的异常情况。
- @ApiParam用于描述该API操作接受的参数类型
再接着,为项目的Model对象添加Swagger Annotation,这样Swagger Scanner可以获取更多关于Model对象的信息。
@ApiModel(value = "A SayingRepresentation is a representation of greeting") @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class SayingRepresentation { private long id; @ApiModelProperty(value = "greeting content", required = true) private String content; public SayingRepresentation(long id, String content) { this.id = id; this.content = content; } public long getId() { return id; } public String getContent() { return content; } }
通过上面的步骤,项目已经具备了提供Swagger格式的API信息的能力,接下来,我们把这些信息和Swagger UI集成,以非常美观,实用的方式把这些API信息展示出来。
和Swagger UI的集成
首先,从github(https://github.com/wordnik/swagger-ui)上下载Swagger-UI, 把该项目dist目录下的内容拷贝到项目的resources的目录assets下。
然后,修改index.html, 把Swagger UI对象中的URL替换为自己的API路径。
window.swaggerUi = new SwaggerUi({ url: "/api/api-docs", dom_id: "swagger-ui-container",
最后,为了能访问到该页面,还需要在Service的Initialize方法中,添加AssetsBundle,
public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) { //指定配置文件的名字 bootstrap.setName("helloWorld"); bootstrap.addBundle(new AssetsBundle("/assets", "/", "index.html")); }
最后的效果图:
评论
8 楼
pacer123
2017-01-11
请问注解@ApiModelProperty 在哪个jar包下面,下载好几个都找不到下面包路径对应的jar文件。
io.swagger.annotations.ApiModelProperty
io.swagger.annotations.ApiModelProperty
7 楼
lrz0534
2016-06-24
你好,我在maven上面下载了swagger-springmvc-1.0.2,swagger-models-1.5.9,swagger-annotations-1.5.9三个包,引入之后依然找不到com.mangofactory.swagger.models这个包下面的类。请问你遇到过这个问题吗?怎么解决的?谢谢
6 楼
xmdxzyf
2015-09-15
可以在网站(www.sosoapi.com)上试下在线表单方式编写swagger-ui对应的json哈,编辑简单而且可以在线预览和导入导出,挺方便的
5 楼
ningandjin
2014-09-28
ron.luo 写道
你好,我在spring mvc里面添加了包,<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.6.0-SNAPSHOT</version>
</dependency>,但是出现错误Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library 'C:\Users\Admin\.m2\repository\com\mangofactory\swagger-springmvc\0.7.0-SNAPSHOT\swagger-springmvc-0.7.0-SNAPSHOT.jar' springmvc Build path Build Path Problem
,请问下哪里可以下载到swagger-springmvc-0.7.0-SNAPSHOT.jar,百度谷歌好久了。
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.6.0-SNAPSHOT</version>
</dependency>,但是出现错误Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library 'C:\Users\Admin\.m2\repository\com\mangofactory\swagger-springmvc\0.7.0-SNAPSHOT\swagger-springmvc-0.7.0-SNAPSHOT.jar' springmvc Build path Build Path Problem
,请问下哪里可以下载到swagger-springmvc-0.7.0-SNAPSHOT.jar,百度谷歌好久了。
swagger-springmvc已经发布到正式仓库,不再是SNAPSHOT了, 你从这儿选一个版本用吧http://mvnrepository.com/artifact/com.mangofactory/swagger-springmvc
4 楼
ron.luo
2014-09-21
你好,我在spring mvc里面添加了包,<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.6.0-SNAPSHOT</version>
</dependency>,但是出现错误Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library 'C:\Users\Admin\.m2\repository\com\mangofactory\swagger-springmvc\0.7.0-SNAPSHOT\swagger-springmvc-0.7.0-SNAPSHOT.jar' springmvc Build path Build Path Problem
,请问下哪里可以下载到swagger-springmvc-0.7.0-SNAPSHOT.jar,百度谷歌好久了。
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.6.0-SNAPSHOT</version>
</dependency>,但是出现错误Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library 'C:\Users\Admin\.m2\repository\com\mangofactory\swagger-springmvc\0.7.0-SNAPSHOT\swagger-springmvc-0.7.0-SNAPSHOT.jar' springmvc Build path Build Path Problem
,请问下哪里可以下载到swagger-springmvc-0.7.0-SNAPSHOT.jar,百度谷歌好久了。
3 楼
xuxuweifeng
2014-04-03
ningandjin 写道
xuxuweifeng 写道
我想问一下
1、private void initSwaggerConfig(Environment environment) 这个方法的参数是一个第三方提供的接口吗?
2、Service方法是dropwizard的吗?
3、能提供一个可下载的demo吗
1、private void initSwaggerConfig(Environment environment) 这个方法的参数是一个第三方提供的接口吗?
2、Service方法是dropwizard的吗?
3、能提供一个可下载的demo吗
1,2:这2部分都是Dropwizard的基础知识: https://dropwizard.github.io/dropwizard/ http://ningandjiao.iteye.com/blog/1766498
2:https://github.com/xianlinbox/DropWizardDemo
thank you! 非常感谢! 我去试试!
2 楼
ningandjin
2014-04-02
xuxuweifeng 写道
我想问一下
1、private void initSwaggerConfig(Environment environment) 这个方法的参数是一个第三方提供的接口吗?
2、Service方法是dropwizard的吗?
3、能提供一个可下载的demo吗
1、private void initSwaggerConfig(Environment environment) 这个方法的参数是一个第三方提供的接口吗?
2、Service方法是dropwizard的吗?
3、能提供一个可下载的demo吗
1,2:这2部分都是Dropwizard的基础知识: https://dropwizard.github.io/dropwizard/ http://ningandjiao.iteye.com/blog/1766498
2:https://github.com/xianlinbox/DropWizardDemo
1 楼
xuxuweifeng
2014-04-02
我想问一下
1、private void initSwaggerConfig(Environment environment) 这个方法的参数是一个第三方提供的接口吗?
2、Service方法是dropwizard的吗?
3、能提供一个可下载的demo吗
1、private void initSwaggerConfig(Environment environment) 这个方法的参数是一个第三方提供的接口吗?
2、Service方法是dropwizard的吗?
3、能提供一个可下载的demo吗
发表评论
-
关于并发的思考
2015-02-08 22:33 4339并发数 并发数和2个因 ... -
使用Hystrix守护应用(3)
2015-01-02 22:04 12876监控HystrixCommand 除了隔离依赖服务的调用外,H ... -
使用Hystrix守护应用(2)
2014-12-30 14:35 16816接上篇(http://ningandjiao.iteye.co ... -
使用Hystrix守护应用(1)
2014-12-30 14:28 15284Hystrix(https://github.com/Netf ... -
Mac下同时安装多个版本的JDK
2014-04-14 21:42 33240JDK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下 ... -
性能测试工具之Gatling
2014-01-15 19:27 17297Gatling一直是久闻其名但 ... -
JavaMail测试工具之GreenMail
2014-01-08 19:13 7367不管现在各种Mock框架的运用有多广,我个人在写单元测试的时候 ... -
定制一个Gradle Plugin --- project-structure
2014-01-03 21:23 8494最近在项目中遇到一个 ... -
Restful Spring MVC应用的Request验证
2013-12-26 15:05 23368在开放平台的时候,尤其是坐Rest服务的时候,因为用户可以给你 ... -
Spring MVC中的异常处理
2013-12-25 13:13 24166在一个良好的Rest架构的应用中,所有的异常都应该有对应的Ht ... -
Spring 4.0升级小贴士
2013-12-22 19:40 11439随着Spring4.0的发布,很多同志估计都在考虑升级的事情了 ... -
Spring4.0给我们带来什么?
2013-12-22 17:13 45031JDK8 对JDK8的支持,这个目前来说还是探索性质,毕竟Ja ... -
RESTful API版本控制策略
2013-12-15 19:51 31740做RESTful开放平台,一方面其API变动越少, 对API调 ... -
对象转换利器之Dozer
2013-12-14 22:46 19879在Java的世界中,经常会 ... -
基于Spring-WS的Restful API的集成测试
2013-11-28 19:41 9068在很多Java企业级应用中,Spring占据了非常重要的位置, ... -
TDD Of Spring JMS
2013-11-25 19:53 1760不知何时养成了习惯,在没有一个可运行的测试的时候,个人完全没有 ... -
进击的Java开发
2013-07-14 20:48 5913今天在公司的邮件组中看到一组很有趣的讨论,这是我最喜欢目前公司 ... -
说说SpringBatch的领域概念
2013-06-21 20:32 3625谈到Spring Batch,会谈到 ... -
做项目时需要考虑的安全性问题
2013-04-16 20:20 4786在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的 ... -
使用Gradle部署jar包到Maven中央库
2013-04-12 16:15 24164Maven作为目前Java界最好的Dependency管理系统 ...
相关推荐
包含翻译后的API文档:swagger-annotations-2.1.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger.core.v3:swagger-annotations:2.1.2; 标签:core、annotations、v3、swagger、jar包、java、中文文档...
包含翻译后的API文档:swagger-annotations-1.5.24-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.24; 标签:annotations、swagger、jar包、java、中文文档; 使用方法:解压...
包含翻译后的API文档:swagger-models-1.5.13-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.swagger:swagger-models:1.5.13; 标签:swagger、models、中英对照文档、jar包、java; 使用方法:解压...
Swagger导出静态API文档工具是基于Swagger的一个实用工具,它是一个Maven工程,这意味着我们可以利用Maven的构建生命周期来自动化文档的生成过程。 首先,让我们了解Maven。Maven是一个项目管理工具,它通过读取...
Swagger是一个强大的工具,可以帮助Java开发者自动化API文档的生成和测试。通过遵循上述步骤,你可以轻松地在你的Spring Boot项目中集成Swagger,并开始享受它带来的便利。 通过本文的详细介绍,你应该已经对如何在...
包含翻译后的API文档:swagger-models-2.1.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger.core.v3:swagger-models:2.1.2; 标签:core、models、v3、swagger、jar包、java、中文文档; 使用方法:...
包含翻译后的API文档:swagger-annotations-1.5.24-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.24; 标签:annotations、swagger、jar包、java、中英对照文档; ...
包含翻译后的API文档:swagger-models-1.6.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-models:1.6.2; 标签:swagger、models、中文文档、jar包、java; 使用方法:解压翻译后的API文档,...
包含翻译后的API文档:swagger-annotations-1.6.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-annotations:1.6.2; 标签:swagger、annotations、中文文档、jar包、java; 使用方法:解压...
包含翻译后的API文档:springfox-swagger-common-3.0.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.springfox:springfox-swagger-common:3.0.0; 标签:springfox、common、swagger、jar包、java、中文文档...
包含翻译后的API文档:swagger-annotations-1.5.20-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.20; 标签:swagger、annotations、中文文档、jar包、java; 使用方法:解压...
包含翻译后的API文档:swagger-annotations-1.5.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.3; 标签:swagger、annotations、中文文档、jar包、java; 使用方法:解压...
包含翻译后的API文档:swagger-annotations-1.5.10-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.10; 标签:swagger、annotations、中文文档、jar包、java; 使用方法:解压...
包含翻译后的API文档:swagger-models-1.5.20-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-models:1.5.20; 标签:swagger、models、中文文档、jar包、java; 使用方法:解压翻译后的API文档...
包含翻译后的API文档:swagger-annotations-1.5.13-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.13; 标签:swagger、annotations、中英对照文档、jar包、java; ...
包含翻译后的API文档:swagger-annotations-1.5.13-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.13; 标签:swagger、annotations、中文文档、jar包、java; 使用方法:解压...
包含翻译后的API文档:swagger-models-1.5.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-models:1.5.3; 标签:swagger、models、中文文档、jar包、java; 使用方法:解压翻译后的API文档,...
包含翻译后的API文档:swagger-models-1.5.13-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.swagger:swagger-models:1.5.13; 标签:swagger、models、中文文档、jar包、java; 使用方法:解压翻译后的API文档...
包含翻译后的API文档:swagger-models-1.5.20-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.swagger:swagger-models:1.5.20; 标签:swagger、models、中英对照文档、jar包、java; 使用方法:解压...
包含翻译后的API文档:swagger-annotations-1.5.10-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.swagger:swagger-annotations:1.5.10; 标签:swagger、annotations、中英对照文档、jar包、java; ...