java rest框架_比较Java REST文档框架

java rest框架

决定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中,我们将简要比较我们自己使用的REST Web服务的三个文档框架,以及它们如何与Spring框架(这是Foreach中最常用的Java框架)集成。 这些是RESTful API建模语言(RAML),Swagger UI和Spring REST Docs。

在每一部分中,我们将对所讨论的文档框架进行高层概述。 我们将简要描述文档框架如何与Spring集成以及如何在您的文档中使用该框架影响构建周期。

RESTful API建模语言(RAML)

Java框架

RAML是一个单独的文档,与您作为开发人员需要手动维护的项目一起保存。 在默认的RAML配置中,几乎不会自动执行任何操作。 但是,借助随附的插件生态系统,很容易扩展RAML使其表现出所需的行为。

该文档框架的生态系统非常活跃,其插件启用了各种功能,例如:

  • API Workbench :“用于设计,构建,测试,记录和共享RESTful HTTP API的丰富,功能齐全的集成开发环境(IDE)”;
  • RAML Java客户端生成器 :根据RAML文档自动生成Java客户端的工具;
  • RAML2HTML :一种Node.js工具,用于生成用户友好HTML文档。

在构建过程中定义的额外步骤中,书面文档将从RAML格式转换为人类可读的文本(或HTML)。

过去,RAML曾经是Java中我们首选的文档框架,但是现在我们发现了一些替代方案,因此我们开始越来越少地使用RAML。 此外,使用RAML很难编写也易于使用的完整文档(因为RAML中的所有文档都需要手动编写)。 此外,在更改API后,我们通常会忘记更新文档。 通过使用一个框架可以解决此问题,在该框架中,大多数API更改都是自动记录的,而不是手动记录的。

招摇UI

相反,Swagger UI自动生成所有内容。 在此框架中,Swagger与Swagger UI和Springfox协同工作,以在运行时生成文档。 该框架包含三个组件:

Java框架
  • Swagger是规范部分:一组描述RESTful服务的规则(与RAML相当);
  • Swagger UI是呈现部分:它呈现用户友好HTML(就像RAML2HTML一样),并允许用户在没有任何客户端基础结构的情况下测试服务,因为它会基于服务的Swagger规范自动生成测试客户端;
  • Springfox是“生成”部分:它与服务交互(通过注释,包括其自身的注释和Spring注释),以在运行时自动生成文档。

这三个组件将检查您的代码以确定需要记录的内容。 他们既可以生成文档(通过动态网站),也可以通过Swagger UI进行“测试服务调用”。 服务调用的工作方式与例如Postman相同,唯一的区别在于,该库可以通过从应用程序的文档化部分向服务发送原始请求来在浏览器中工作。

由于Springfox将在运行时负责生成,因此无需定义额外的构建步骤(与RAML和Spring REST Docs不同,在其中需要单独的构建步骤)。

当我们第一次开始使用它时,Swagger堆栈似乎很棒。 我们几乎没有(人工)劳动,因为一切都是自动生成的。 同时,我们仍然可以通过在代码中添加注释来调整文档。 我们认为,这既是优点也是缺点。 因为虽然Swagger UI确实易于使用,但是我们对生成的文档的控制没有我们想要的那么多。

Spring REST文件

Spring REST Docs是Spring生态圈的一部分,可根据您的单元测试生成AsciiDoc片段。 这些摘录可包含在手写的AsciiDoc中,以为您的API汇编文档。

Java框架

为此,您可以指定希望从对MockMVC端点的调用中检索的字段,并定义要在文件系统上创建生成的代码段的位置。 如果期望的字段与结果不完全一致,则您的测试将失败,这意味着与文档相关的单元测试也将作为代码的额外检查。

在构建过程的后期,您将需要定义一个额外的步骤,通过将生成的代码片段与手写索引页结合起来,生成人类可读HTML文件,从而促进文档的传播。

我们在一个项目中使用了Spring REST Docs,该项目需要外部参与者使用API​​和常规文档。 他们使用自己的测试工具,因此不希望为他们提供基于浏览器的界面来测试该界面。 我们之所以选择REST Docs框架,是因为(a)它也可能是我们集成测试的一部分,并且(b)我们可以轻松地将其与我们所有其他非技术性文档结合在一起。

总览

Java框架

如您所见,“最佳”文档框架取决于您期望文档框架能够完成的工作。 如果您希望不需要大量的“静态”文档(即,如果可以自动生成所有内容),则开箱即用的Swagger UI更容易使用。

另一方面,如果您需要提供单个文档,或者只想对文档进行更多控制,则最好使用RAML或Spring REST Docs之类。 而且,已经证明与Spring REST Docs中的测试集成非常有用。

无论您选择什么,每个单独的框架都足以以明确的方式将Web服务的合同传达给其他开发人员-这最终是这些框架的目标。

翻译自: https://www.javacodegeeks.com/2019/01/comparing-java-documentation-frameworks.html

java rest框架

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

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

相关文章

数据库的事务学习

文章目录事务四大特征多事务并发存在的问题事务隔离级别查询数据库的隔离级别设置数据库隔离级别1.事务里面的语句出错时并不会主动回滚,需要用户主动执行回滚指令 2.事务开始后,如果没有主动执行回滚或者提交指令,事务始终在执行中 3.事务执…

注解动态赋值_Java注解是如何玩转的,面试官和我聊了半个小时

作者:wind瑞 来自:JavaQ面试官:自定义的Java注解是如何生效的? 小白:自定义注解后,需要定义这个注解的注解解析及处理器,在这个注解解析及处理器的内部,通过反射使用Class、Method、…

阿里云服务器如何创建快照备份数据

文章目录创建快照快照收费你申请了阿里云服务器,其实就是申请了一个云盘,这个云盘安装了操作系统,你可以远程访问这个系统并使用该系统。我们可以给云盘创建快照,从而达到备份服务器数据的目的。创建快照 快照收费 如果您计划不再…

shebang_Java 11:运行单文件程序和“ shebang”脚本

shebang在Java 11中,对java启动器进行了增强,可以直接运行单文件源代码程序,而不必先编译它们。 例如,考虑以下仅添加其参数的类: import java.util.*; public class Add {public static void main(String[] args) {…

iShot快捷键

快捷键说明Option A选择截图区域Option Z截图光标下的窗口Option X截图整个屏幕Option D延时截图Option W开始录屏/结束录屏

日期格式化为yyyymmdd_Excel小技巧——如何将多行日期快速转换为数字文本

Hello~大家好,本来计划这一期给大家介绍一下如何根据身份证号快速获得性别信息的小技巧,但是在上一节内容如何将数字快速转换成日期格式发布后,就有朋友私信问我,可不可以再介绍一下将日期快速转换成数字文本的方法呢?…

顽皮狗 多线程分享_谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!...

顽皮狗 多线程分享有没有想过圣诞老人如何为世界各地的孩子们提供节日礼物? 有20亿个孩子,每个孩子都有自己的愿望清单,他会在24小时内完成。 这意味着平均每个孩子43微秒,他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我…

2021新交规超速处罚规定

1.时速超过限定时速不到10%的,给予警告; 2.在限速为50公里以下的道路,时速超过限定时速10%以上不到20%的(必须低于时速55公里),处50元罚款;超过限定时速20%以上不到50%的,处100元罚…

处理接口超时_架构设计|异步请求如何同步处理?

本文创意来自一次业务需求,这次需要接入一个第三方外部服务。由于这个服务只提供异步 API,为了不影响现有系统同步处理的方式,接入该外部服务时,应用对外屏蔽这种差异,内部实现异步请求同步。全文摘要:异步…

使用Spring Boot和MongoDB构建一个React式应用程序

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您要处理大量流数据,React式应用程序可让您更好地扩展。 它们是非阻塞…

jax-ws和jax-rs_JAX-RS和OpenAPI对Hypermedia API的支持:任重而道远

jax-ws和jax-rs或早或晚,大多数积极使用REST(ful) Web服务和API的开发人员偶然发现了这种真正的外星事物,即HATEOAS : 超文本作为应用程序状态的引擎 。 对HATEOAS是什么及其与REST的关系的好奇最终将导致发现Richards…

如何下载MySQL的JDBC驱动包

1.打开 MySQL 官网:https://www.mysql.com/ 2.点击 DOWNLOADS,把页面滚动到最下面,点击 MySQL Community (GPL) Downloads 3.点击 Connector/J 4.点击 General Availability(GA) Releases,在 Select Operating System 下拉列表选…

IntelliJ IDEA for Mac如何添加jar包/如何导入jar包/导包

文章目录如何将 jar 包添加到已存在的资源库中将 jar 包添加到项目级别的资源库中将 jar 包添加到全局级别的资源库中将 jar 包添加到模块级别的资源库中创建资源库创建模块级别的资源库创建项目级别的资源库创建全局级别的资源库给某个模块单独添加 jar 包模块的依赖标签页&am…

r2dbc_使用Spring Data R2DBC进行异步RDBMS访问

r2dbc不久之前,发布了JDBC驱动程序的React性变体。 称为R2DBC。 它允许将数据异步流传输到已预订的任何端点。 通过将R2DBC之类的React性驱动程序与Spring WebFlux结合使用,可以编写一个完整的应用程序,以异步方式处理数据的接收和发送。 在本…

python中布尔类型是特殊的_Python中的特殊方法以及应用详解

前言Python 中的特殊方法主要是为了被解释器调用的,因此应该尽量使用 len(my_object) 而不是 my_object.__len__() 这种写法。在执行 len(my_object) 时,Python 解释器会自行调用 my_object 中实现的 __len__ 方法。除非有大量的元编程存在,直…

IntelliJ IDEA 自动补全变量名称和变量类型(自动补全变量的声明内容)

文章目录varOption EnterOption Command Vvar // 如下声明定义一个字符串变量 String s new String(); // 1 先编写 new String() // 2 在 new String() 后面输入 .var 直接回车,即可得到我们想要的变量了 // 3 上面生成的变量名可能不是我们想要的&#xff0c…

jdk11 jdk12_JDK 12附带紧凑数字格式

jdk11 jdk12JDK 12 Early Access Build 24引入了对紧凑数字格式的支持 。 JDK-8188147(紧凑数字格式支持)CSR的“摘要”是简单的句子,“添加了对JDK中的紧凑/短数字格式的支持。” 同一CSR还提供了详细的“解决方案”部分,该部分提…

全连接层 时间复杂度_神经网络全连接层(3)

CNN网络基础结构神经网络-全连接层(3)上一回我们聊完了算法,这回我们正式开始写代码。上回在做公式推导的时候,我们实际上只是针对一个数据样本进行推导,而实际中,计算和训练都是一批一批完成的。大多数机器学习训练都有batch的概…

line和spline_探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

line和spline最近引起我注意的一个有趣且很有希望的开源项目是Spline ,它是由Absa维护的Apache Spark数据沿袭跟踪和可视化工具。 该项目由两部分组成:一个在驱动程序上工作的Scala库,该库通过分析Spark执行计划来捕获数据沿袭,以…

MacBook如何快速显示桌面

1.触控板中张开拇指和其它三指 2.通过触发角来快速显示桌面