带有Swagger的Spring Rest API –公开文档

创建API文档后,将其提供给涉众非常重要。 在理想情况下,此发布的文档将具有足够的灵活性以解决任何最新更改,并且易于分发(就成本以及完成此操作所需的时间而言)。 为了使这成为可能,我们将利用我在上一篇文章中完成的详细介绍API文档创建过程的内容 。 结合使用Swagger UI模块和json中已发布的API文档,我们可以创建可用于与API交互的简单HTML文档。

与Swagger UI集成

Swagger UI的开发者将其描述为HTML,Javascript和CSS资产的无依赖集​​合,可从与Swagger兼容的API动态生成漂亮的文档和沙箱。 由于Swagger UI没有依赖关系,因此您可以将其托管在任何服务器环境或本地计算机上。 话虽如此,让我们看一下如何将Swagger文档提供给Swagger UI。 作为HTML,CSS和JS的静态集合,我们可以将其拖放到我们的项目中,而无需修改我们的pom.xml或项目中的任何其他文件。 只需转到GitHub并下载最新文件即可。

完成后,只需提供指向您的API列表的链接。 只需打开index.html并用您自己的默认API列表URL替换就可以了。 我的示例中的URL看起来像这样: http://[hostname]:[port]/SpringWithSwagger/rest/api-docs 。 保存此更改并部署应用程序和静态Swagger UI之后,您应该能够浏览API并与之交互。

API文档

根据我的示例,我可以访问以下URL http://localhost:8080/SpringWithSwagger/apidocs/ (由于我选择的部署方法的性质)。 如您所见,Swagger UI仅使用以json格式发布的数据(先前已讨论)。 您会看到的第一件事是API列表,它使您可以浏览已发布的API的集合。

api列表

当您要浏览可用的操作时,只需单击一下所有简短说明的所有精美彩色列表,便可以知道下一步的导航位置。 颜色在整个清单中保持一致,并很好地补充了操作。

方法清单

当您找到所需的操作时,便该该首先获取您要查找的信息了。 单击方法名称,将显示完整的方法说明以及参数和响应消息。 但是还有更多原因,因为您可以使用自己的API并测试您的方法。 提供所有必需的参数并点击“尝试一下!” 按钮,您可以检查您的应用程序服务器是否已启动并以预期的方式运行。 如果您的代码需要某种类型的文件上传(就像我的更新用户的头像逻辑一样),那么Swagger UI会提供方便的工具来使其尽可能地容易。

化身

即使您能够进行一些快速的即席测试或检查,此工具也绝对不适合应用程序测试。 它所做的只是以一种易于阅读的方式提供API文档,如果您有需要的话,可以自己尝试该方法(以提高对文档的理解)。 我发现这很不错,因为您需要了解一下操作本身,并且它的可观察到的行为Swagger UI可以使您满意,如下所示。

方法测试

擅长的地方

我真的很喜欢Swagger处理文档的方式以及Swagger UI呈现文档的方式。 以下几点使Swagger非常适合我的API文档需求:

  1. 语言不可知
    • 在异构环境中工作或考虑将新语言和工具引入您的项目时,该资产具有极大的价值。
  2. 基于注释的文档
    • 批注将文档绑定到代码,以单个生命周期创建一个单元。 这使得管理,发布和发布的整个过程变得更加容易,并允许进行自动化。
  3. 公开进行后期处理
    • 拥有json形式的中间步骤可让开发人员将自定义脚本和转换器附加到流程中,以便根据涉众的需要生成各种格式的文档,例如PDF或Word文档。
  4. 丰富的模块和组件生态系统
    • 如果浏览Swagger的可用模块和组件,您可能会惊讶于此工具花了多少时间。 那里有许多有用的组件,因此很有可能会找到您认为您的项目可能需要或受益的Swagger扩展。
  5. 外观精美的UI工具
    • 因为我在UI方面不是很有才华,所以我很高兴不必烦恼如何创建,格式化,呈现和交付文档的方式。 我所需要的只是在源代码中提供相关信息,仅此而已。 框架负责其余的工作,而我很快就得到了及时的文档。 鉴于Swagger UI的性质,如果需要,可以很容易地向其添加自定义公司标识。
  6. 试试看! 选项
    • 小事总是让我开心。 但是我认为,对整个团队来说,在文档中整齐地打包此选项(例如,在需要的地方,需要的时候)非常有益。

不足之处

我不会假装这是灵丹妙药,适合所有解决方案。 当然,在某些情况下,此类工具不是首选。 鉴于其年轻的年龄,仍有一些事情需要增加/改进。 但重要的是要声明该项目仍在开发中,并且日渐流行。 话虽这么说,我想指出一些我发现的问题,这些问题需要深入研究和其他工作。 在我的第一次尝试中,我将重点关注三个主要问题。

  1. 有条件地访问某些模型参数
    • 根据您的需求(以及使用的Swagger版本),您可能会发现自己需要从Swagger UI和Swagger json隐藏某些模型参数。 但是,这比我预期的需要更多的工作,并且需要修改模型属性。 可以预期,随着Swagger及其相关组件的下一个主要版本的发布,情况会变得更好,但是在此之前,您不得不手动执行此操作。 如果您对如何实现此目标感兴趣,请查看我的下一篇名为Swagger的Spring Rest API –精调公开的文档。
  2. 文件上传及相关字段
    • 您的某些API操作可能需要上传文件(例如我的头像更新方法)。 但是,要使操作细节看起来像我的示例中所呈现的那样,需要一点点的手工工作和规范筛选。 要摆脱与此问题相关的不需要的参数,请查看我的下一篇名为Swagger的Spring Rest API –精调公开的文档,我将在此详细介绍此问题以及如何在此处显示结果。
  3. API模型和XML
    • Swagger声称它是json和XML的朋友。 在操作级别上肯定是正确的,但是,在模型表示方面,XML比json位居第二(由于与XML及其模式有关的技术复杂性)。 当前,Swagger UI中的所有API模型都显示为json实体(json和XML),这迫使我不要在ProductsEndpoint文档中声明响应类型(在我的SpringWithSwagger示例中,示例使用XML格式的端点)。 这是我尚未完全解决的问题,因此我有意选择在处理XML时不声明响应类型。

下一步是什么?

如果按照所有步骤进行操作,现在应该已经有适用于您的API的API文档/沙箱。 在我的下一篇名为Swagger的Spring Rest API的文章中,我将展示如何使用Swagger来微调已发布的文档-微调公开的文档。 该微型系列中使用的代码在GitHub上发布,并提供了所有讨论的功能和工具的示例。 请享受!

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

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

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

相关文章

Laravel 不同环境加载不同的.env文件

假设有4个.env文件。分别为 .env.local .env.dev .env.test .env.prd 方式一 第一步:bootstrap\app.php 加入代码 $envs [local,dev,test,prd]; $env get_cfg_var(env); if(empty($env) || !in_array($env, $envs)){exit(no env files); } $env .env..$env; $app…

伪类 选择器优先级

:link 匹配所有未被点击的链接;a:link{color:red} :visited 匹配所有被点击的链接;a:visited{color:red} :hover 匹配鼠标悬停其上的E元素 a:hover{text-decoration:underline} :active 匹配鼠标已经其上按下,还没有释放的E元素 a:active{…

hinkphp项目部署到Linux服务器上报错“模板不存在”如何解决

检查了服务器上的文件,并没有缺少文件,再次上传文件到服务器,还是报错。莫名其妙,怀疑是代码问题。 仔细检查后,发现是模板的文件名问题: 用过TP的都知道:thinkphp会在$this->display()的时候…

VS2008调试总结

从文件Form1.cs和文件Form1.Designer.cs中,可以看到它们定义了同一个类Form1,并且都有一个关键字partial。该关键字作用是允许类分开定义,并且可以将类定义放在不同的文件里面(命名空间必须相同)。 总结上述三个文件&a…

使用FizzBu​​zz和JUnitParams进行单元测试

我有时使用FizzBu​​zz向新手演示单元测试的基础。 尽管FizzBu​​zz确实是一个简单的问题,但它也可以用于演示更高级的单元测试技术,例如实现参数化测试。 FizzBu​​zz的可能解决方案之一是: public class FizzBuzz {private static fin…

Elements in iteration expect to have v-bind:key directives错误的解决办法

一、错误如下[eslint-plugin-vue][vue/require-v-for-key]Elements in iteration expect to have v-bind:key directives.Renders the element or template block multiple times based on the source data. 使用VS Code 出现如下问题,如图 二、解决 在用vscode编写…

统计年鉴 付费下载 夏泽网

夏泽网链接 转载于:https://www.cnblogs.com/camelroyu/p/11597533.html

浏览文件按钮

private void btnSelect2_Click(object sender, EventArgs e){string path GetPath();if (!string.IsNullOrEmpty(path)){tbText2.Text path;}}private string GetPath(){OpenFileDialog fileDialog new OpenFileDialog();fileDialog.Title "选择文件";fileDialo…

无法使用JDK 8卸载JavaFX SceneBuilder 1.0

我最近从旧的基于Vista的笔记本电脑中删除了一些我曾经使用过的软件开发应用程序,工具和文件,因为主要使用该笔记本电脑的人们现在对软件开发不再感兴趣。 作为该工作的一部分,我尝试删除了几年前在该笔记本电脑上安装的JavaFX Scene Builder…

分享一个不错的表格样式

先贴个HTML生成的源码出来&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

微信小程序如何检测接收iBeacon信号

前话 微信小程序开发带着许多坑&#xff0c;最近就遇到了个需求&#xff0c;检测iBeacon来进行地点签到。 (╯▔皿▔)╯ 微信小程序对于iBeacon的文档也写的十分精简&#xff0c;只简单介绍了每个接口的作用&#xff0c;这就导致我以为简单调用单个接口即可实现功能&#xf…

centos7.3 docker安装grafana

一、编写docker-cmpose文件 docker-compose.yml文件如下&#xff1a; 1 version: "3.3"2 services:3 grafana:4 image: grafana/grafana:latest5 environment:6 GF_SECURITY_ADMIN_PASSWORD: aibili_grafana7 ports:8 - 3000:30009 us…

如何将SQL GROUP BY和聚合转换为Java 8

我无法抗拒。 我已经阅读了Hugo Prudente在Stack Overflow上提出的问题 。 而且我知道必须有比JDK提供的更好的方法。 问题如下&#xff1a; 我正在寻找一个lambda来优化已检索的数据。 我有一个原始的结果集&#xff0c;如果用户不更改我想要的日期&#xff0c;则使用Java的…

类库,随机数,属性,值类型和引用类型

类库&#xff0c;随机数&#xff0c;属性&#xff0c;值类型和引用类型 1.文档注释与类库的生成 (1)类库的生成 右击添加新建项&#xff0c;建立类库&#xff08;DLL&#xff09;。 (2)导入类库 在项目中建立文件夹DLL&#xff0c;直接把外部DLL和XML文件拖入文件夹&#xff0c…

input获得焦点和失去焦点

总结&#xff1a;placeholder因为在IE7 8 9 浏览器不支持所以没用它效果&#xff1a;当input获取光标的时候如果是默认提示则input内容为空。如果不是则为输入内容 当失去光标的时候&#xff0c;如果input内容为空&#xff0c;则恢复默认提示&#xff0c;如果不是则为…

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

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

zabbix监控docker容器

1、环境说明 由于最近zabbix进行过一次迁移&#xff0c;所以zabbix-server系列采用docker方式安装&#xff0c;参考zabbix官网&#xff1a;https://github.com/zabbix/zabbix-docker。为适应本地环境和需求&#xff0c;docker-compose.yml文件有改动&#xff0c;具体内容如下&a…

全角半角转换

#region 全角半角转换 /// <summary> /// 转全角的函数(SBC case) /// </summary> /// <param name"input">任意字符串</param> /// <returns>全角字符串</returns> ///<remarks> ///全角空格为12288&#xff0c;半角空格…

jquery中的left和top

left 和 top /*1. 获取元素基于定位容器的位置*//*返回的是对象 属性 left top */var position $(.inner).position();console.log(position.left);console.log(position.top);/*2. 获取元素基于页面容器的位置 基于页面的偏移*/var offset $(.inner).offset();console.l…

让我们用jOOλ在Java 8中流式传输地图

我想找到一种简单的方法来用Java 8流式传输Map 。猜猜是什么&#xff1f; 没有&#xff01; 为了方便起见&#xff0c;我期望的是以下方法&#xff1a; public interface Map<K, V> {default Stream<Entry<K, V>> stream() {return entrySet().stream();} …