简介:Swagger 是一个规范和完整的前端框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 规范也逐渐发展成为了 OpenAPI 规范。
作者 | 柯然(邪影)
来源|阿里巴巴云原生公众号
Swagger 是一个规范和完整的前端框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 规范也逐渐发展成为了 OpenAPI 规范。
Springfox 是一个集成了 Swagger,基于 Sring MVC/Spring Webflux 实现的一个 Swagger 描述文件生成框架,通过使用它定义的一些描述接口的注解自动生成 Swagger 的描述文件,使 Swagger 能够展示并调用接口。
相信很多人都听说和使用过 Swagger 和 Springfox,这里就不再赘述了。
Dubbo-Admin 中有接口测试功能,但是缺少接口描述的文档,所以该测试功能比较适合接口开发人员用于测试接口。而其他人想要使用该功能就必须先通过接口开发者编写的文档或者其他方式,了解清楚接口信息才能使用该功能测试接口。
Dubbo 这边有没有集合文档展示和测试功能,可以不用写文档就能把接口直接给调用方,类似 Swagger/Springfox 的工具呢?
之前做过一些调研,找到一些类似的工具:
它们都有一个共同点:会把你的提供者变为 Web 项目。当然有些提供者是通过 web 容器加载启动的,甚至也有和 web 工程在一起的,那就无所谓了。
但也有非 web 的提供者,为了文档我得把它变为 web 项目吗?(还要引入一堆 Web 框架的依赖?比如 Spring MVC?)或者说生产环境打包时,删除它的引用和代码里的相关注解? 有没有简单点的方式呢?
OpenAPI 中没有 RPC 的规范,Swagger 是 OpenAPI 的实现,所以也不支持 RPC 相关调用。Springfox 是通过 Swagger 实现的 RESTful API 的工具,而 RESTful 又是基于 Web 的,Dubbo 没法直接使用。我们最终选择了自己实现:
今天,我很高兴的宣布:Dubbo 用户也可以享受类似 Swagger 的体验了 -- Dubbo-Api-Docs 发布了。
Dubbo-Api-Docs 是一个展示 dubbo 接口文档,测试接口的工具。
使用 Dubbo-Api-Docs 分为两个主要步骤:
在 dubbo 项目引入 Dubbo-Api-Docs 相关 jar 包,并增加类似 Swagger 的注解。
在 Dubbo-Admin 中查看接口描述并测试。
通过以上两个步骤,即可享受类似 Swagger 的体验,并且可以在生产环境中关闭 Dubbo-Api-Docs 的扫描。
Dubbo-Api-Docs 目前通过直连服务节点的方式获取该服务的接口列表。测试接口时,可以直连也可以通过注册中心,未来会增加通过注册中心获取服务列表的方式,并根据 Dubbo 的升级规划增加新的功能支持,也会根据社区的需求增加功能。
Dubbo-Api-Docs 会在服务提供者启动完毕后,扫描 docs 相关注解并将处理结果缓存,并增加一些 Dubbo-Api-Docs 相关的 Dubbo 提供者接口。缓存的数据在将来可能会放到 Dubbo 元数据中心中。
org.apache.dubbo
dubbo-api-docs-annotations
${dubbo-version}
org.apache.dubbodubbo-api-docs-core${dubbo-version}
为避免增加生产环境中的资源占用,建议单独创建一个配制类用于启用 Dubbo-Api-Docs,并配合 @Profile("dev") 注解使用。>
当然,Dubbo-Api-Docs 仅在项目启动时多消耗了点 CPU 资源,并使用了一点点内存用于缓存,将来会考虑将缓存中的内容放到元数据中心。
git clone -b 2.7.x https://github.com/apache/dubbo-spi-extensions.git
进入 dubbo-spi-extensions/dubbo-api-docs/dubbo-api-docs-examples 目录。
dubbo-api-docs-examples 中有两个子模块:
下面我们在这两个子模块中增加 Dubbo-Api-Docs:
examples-api:
maven 引入:
org.apache.dubbo
dubbo-api-docs-annotations
2.7.8
org.apache.dubbo.apidocs.examples.params 中有两个 Bean,我们来为它们添加 docs 注解。
public class QuickStartRequestBean {
@RequestParam(value = "You name", required = true, description = "please enter your full name", example = "Zhang San")
private String name;
@RequestParam(value = "You age", defaultValue = "18")
private int age;
@RequestParam("Are you a main?")
private boolean man;
// getter/setter略...
}
public class QuickStartRespBean {
@ResponseProperty(value = "Response code", example = "500")
private int code;
@ResponseProperty("Response message")
private String msg;
// getter/setter略...
}
由于我们只挑选了部分接口作为演示,到此这些接口涉及的 docs 注解添加完毕。
examples-provider:
maven 引入:
org.apache.dubbo
dubbo-api-docs-core
2.7.8
我们挑选一个接口作为演示:
org.apache.dubbo.apidocs.examples.api.impl.QuickStartDemoImpl 中的 quickStart 方法。
QuickStartDemoImpl 实现了 api 包中的 org.apache.dubbo.apidocs.examples.api.IQuickStartDemo 接口。
@DubboService
@ApiModule(value = "quick start demo", apiInterface = IQuickStartDemo.class, version = "v0.1")
public class QuickStartDemoImpl implements IQuickStartDemo {
@ApiDoc(value = "quick start demo", version = "v0.1", description = "this api is a quick start demo", responseClassDescription="A quick start response bean")
@Override
public QuickStartRespBean quickStart(@RequestParam(value = "strParam", required = true) String strParam, QuickStartRequestBean beanParam) {
return new QuickStartRespBean(200, "hello " + beanParam.getName() + ", " + beanParam.toString());
}
}
到此 docs 相关注解已添加完毕,下面我们来开启 Dubbo-Api-Docs。新增一个配制类,位置任意,只要能被 spring boot 扫描到就行。
我们在 org.apache.dubbo.apidocs.examples.cfg 包中新增一个配制类 DubboDocConfig:
@Configuration
@Profile("dev") // 配合 Profile 一起使用, 在 profile 为 dev 时才会加载该配制类
@EnableDubboApiDocs // 开启 Dubbo-Api-Docs
public class DubboDocConfig {
}
到此 Dubbo-Api-Docs 相关的东西已经添加完毕。
dubbo-api-docs-examples 中有更多更为详尽的例子,下文中有注解的详细说明。下面我们来看一下增加 Dubbo-Api-Docs 后的效果图:
在 examples-provider 目录中:
mvn spring-boot:run
dubbo-admin 需要下载 develop 分支源码启动。
git clone -b develop https://github.com/apache/dubbo-admin.git
参考 dubbo-admin 里的说明启动:
1. 在 dubbo-admin-server/src/main/resources/application.properties 中修改注册中心地址
2. 编译 mvn clean package
3. 启动:
mvn --projects dubbo-admin-server spring-boot:run
或者
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
4. 浏览器访问: http://localhost:8080
5. 默认帐号密码都是: root
Dubbo-Api-Docs 根据功能拆分,分别在两个仓库中:
dubbo-spi-extensions 仓库地址
该仓库存放 dubbo 的一些非核心功能的扩展,Dubbo-Api-Docs 作为该仓库中的一个子模块,由于该仓库属于 Dubbo 3.0 中规划的一部分,而 Dubbo-Api-Docs 是基于 Dubbo 2.7.x 开发的,所以在该仓库中增加了 2.7.x 分支,Dubbo-Api-Docs 就在该分支下。
该仓库中包含了 Dubbo-Api-Docs 的文档相关注解、注解扫描能力和使用示例:
Dubbo-Admin 仓库地址
文档的展示及测试放在了 dubbo admin 项目中。
@EnableDubboApiDocs:配制注解,启用 dubbo api docs 功能。
@ApiModule:类注解,dubbo 接口模块信息,用于标注一个接口类模块的用途。
@ApiDoc:方法注解,dubbo 接口信息,用于标注一个接口的用途。
@RequestParam:类属性/方法参数注解,标注请求参数。
@ResponseProperty:类属性注解,标注响应参数。
示例使用 nacos 作为注册中心,下载并启动 nacos。
任意启动 examples-provider 和 examples-provider-sca 中的任意一个,当然也可以两个都启动。examples-provider 使用 20881 端口 examples-provider-sca 使用 20882 端口。两个项目都是 spring boot 项目,启动类在 org.apache.dubbo.apidocs.examples 包下。
启动 Dubbo-Admin,浏览器访问:http://localhost:8080。
进入 dubbo-admin 中的 “接口文档” 模块。
在 “dubbo 提供者 IP” 和 “dubbo 提供者端口” 中分别输入提供者所在机器 IP 和端口,点击右侧 “加载接口列表” 按钮。
左侧接口列表中加载出接口列表,点击任意接口,右边展示出该接口信息及参数表单。
填入表单内容后,点击最下方测试按钮。
响应部分展示了响应示例及实际响应结果。
如果你对 Dubbo Api Docs 的建设有兴趣,欢迎你钉钉搜索群号:34403965,加入 Dubbo Api Docs 共建小组;也欢迎你钉钉搜索群号:21976540,加入 Dubbo 开源讨论群。
原文链接:https://developer.aliyun.com/article/781151?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。