Gin与OpenAPI(Swagger)的使用

一、背景

1、swagger与openapi

      Swagger:       

        一种用于描述RESTFUL API的规范,它提供了一种简单的来描述API的请求和相应参数、错误码、返回数据类型等信息,是开发者可以方便了解API使用方式。

         官网: https://swagger.io/

     OpenAPI :

        始于 Swagger 规范,Swagger 规范已于 2015 年捐赠给 Linux 基金会后改名为 OpenAPI,并定义最新的规范为 OpenAPI 3.0。
        OpenAPI 规范(OAS)是一种通用的、和编程语言无关的 API 描述规范,使人类和计算机都可以发现和理解服务的功能,而无需访问源代码、文档或针对接口进行嗅探。正确定义后,使用者可以使用最少的实现逻辑来理解远程服务并与之交互。

        官网: https://www.openapis.org/

2、API设计优先的理念优势

        我们在实际前后端开发的过程中,其实前后端可以并行开发,这样可以缩短我们的项目工期,提高工作效率。但是,并行工作的前提是,前端知道后端要返回怎么样的接口数据,后端知道前端需要怎么样的数据。  由此, 前后端必须先对API结构进行一个"约定", 约定需要哪些接口、接口的URL、接口的参数、接口的响应等参数,明确后,双方基于这个接口文档/接口约定进行开发。

        但是前端,开发过程中,后端接口还没做好,怎么对接呢? 此时由于我们已经将接口内容定下来了,所以,此时我们希望有一种工具能够给一些模拟的数据,前端先针对这些模拟数据进行Mock开发。 最后前后端开发差不多了,直接将API的URL地址改为后端地址,即可完成开发,转而进行后续测试、部署,极大提高了我们的开发效率。

        所以一般前后端开发基于OpenAPI的方式,步骤如下:

        1、API设计优先的理念就是, API是一份前后端开发的”契约”, 前后端先进行数据接口展示和获取的定义, 也就是定义输入、正常输出、异常输出等情况API的输入参数、输出数据格式。 最后双方再基于API契约进行代码的实现

        2、后端根据API接口进行编码, 前端可以通过Mock程序模拟后端返回(按照API定义的请求、响应数据类型格式)进行随机数填充

        3、前后端可以同时基于契约进行并行开发,最后前后端都开发OK了,前端再将API地址从Mock服务器改为测试服务器地址,最后进行调试整合即可

二、API设计的相关工具

        关于API设计的相关工具可以参考这个站点: https://openapi.tools/

1、API文档可视化编辑器(stoplight-studio)

        如果我们是手动编辑OpenAPI的yaml文档来生成接口文档,这个确实效率比较低。人工编写API的yaml文件,工作量太大,我们可以使用可视化工具对OpenAPI的规范文件进行设计, 最终生成yaml文件. 此时,我们期望有一种可视化工具,通过可视化工具配置,即可完成这个过程。那么这个工具就是stoplight-studio:     

2、提供给消费者(前端)的Mock服务工具(Prism)

        前面我们讲过,前端不能干等着后端开发完所有接口才能开始进行对接。那么此时,我们前端需要获取后端的模拟数据,这个Mock工具就是Prism。 它可以根据我们定义的OpenAPI文档,数据的响应格式、数据类型,返回模拟数据进行填充,这样就模拟完成前后端对接的工作。 无须等待后端全部完成工作才进行对接。 最后很简单,当前后端完成后,前端将URL地址换成后端地址即可.

3、提供给生产者(后端)的Code代码生成工具(OpenAPI Generator)

        针对后端来说,我们需要根据OpenAPI的URL、参数、响应编写后端代码。 此时后端的同学也想提高效率,有没有根据文档一键生成后端框架代码的工具呢? 答案是肯定的。 例如Golang的Gin框架,可以通过此工具根据OpenAPI的文档yaml文件生成route路由代码,可以提高我们的工作效率。

 三.代码转OpenAPI文档

1、优势

        这个工具是我们场景的应用场景。 我们后端在编写接口的时候,往往都会将这个接口的相关文档编写到一个专门记录这些接口的文档工具进行记录。例如Yapi等这些平台。

        但是这种方式往往存在一些问题,那就是,每次更新完代码以后,忘记更新了Yapi的文档或者漏更新了文档,导致文档和最新代码不一致。

        此时我们可以借助代码框架集成swagger、openapi的方式,通过编写代码的时候,顺带通过注解的方式,将接口的相关信息写上,最后在发布项目的时候,自动生成swagger文档,这样可以有利于对文档的实时更新,写代码的时候顺带将文档写上了,一举两得。

2、Gin框架配置Swagger

开源项目地址: https://github.com/swaggo/gin-swagger

1、安装依赖

go install github.com/swaggo/swag/cmd/swag@latest
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

2、swag init初始化docs目录

执行命令: swag init
会生成docs目录, 目录里存在swagger api的yaml配置文件以及json相关文件

3、接口添加相关注解

4、main.go配置swagger路由信息

5、swag init 且 运行程序(每次代码更新,需要swag init生成新的文档)

四、总结

        从上文我们可以发现OpenAPI的文档yaml可以转换为对应框架的代码, 对应的框架代码也可以生成yaml文档。

        其实除了上面说的:

        1、基于文档契约,前后端可以并行工作

        2、文档和代码可以直接放在一起进行维护,保持文档与代码的准确性

        其实还有一种场景,例如之前你们一直按照这种OpenAPI或者Swagger的方式进行开发,最初使用的是PHP、或者Python, 现在由于业务发展, 需要更加高性能的实现, 转换为Go或者Java, 那么此时,我们只需要拿到OpenAPI/Swagger的yaml文件,通过工具生成对应Go、Java框架路由代码, 参数、路由、响应数据格式都一键生成,自己再实现接口逻辑即可。

        不需要自己再慢慢看文档来从头到尾实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

京东二面:Sychronized的锁升级过程是怎样的

引言 Java作为主流的面向对象编程语言,提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题。其中,内置的关键字"Synchronized"扮演了至关重要的角色,它能够确保在同一时刻只有一个线程访问特定代码块或方法&#…

Redis常用命令——Hash篇

前面我们讲述了String的相关操作命令。本篇文章主要讲解Redis中数据结构Hash的相关操作命令。希望会对你有所帮助。 目录 一、Hash哈希 二、命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX HINCRBY 和 HINCRBYFLOAT 三、小结 🙋‍♂️ 作者&a…

SpringBoot整合RabbitMQ的快速使用教程

目录 一、引入依赖 二、配置rabbitmq的连接信息等 1、生产者配置 2、消费者配置 三、设置消息转换器 四、生产者代码示例 1、配置交换机和队列信息 2、生产消息代码 五、消费者代码示例 1、消费层代码 2、业务层代码 在分布式系统中,消息队列是一种重要…

【老王最佳实践-6】Spring 如何给静态变量注入值

有些时候,我们可能需要给静态变量注入 spring bean,尝试过使用 Autowired 给静态变量做注入的同学应该都能发现注入是失败的。 Autowired 给静态变量注入bean 失败的原因 spring 底层已经限制了,不能给静态属性注入值: 如果我…

【AI算法岗面试八股面经【超全整理】——机器学习】

AI算法岗面试八股面经【超全整理】 概率论信息论机器学习深度学习CVNLP 目录 1、回归损失函数2、分类损失函数3、误差(Error)、偏差(Bias)、方差(Variance)4、PCA(Principle Component Analysi…

数据库语法树优化

目录 一、σ、π、⋈ 1.选择σ 2.投影π 3.连接⋈ 二、 构建语法树 ① 解读sql语句 ② 写出关系代数表达式 ③ 画出语法树 三、优化语法树 四、练习 语法树优化方法 一、σ、π、⋈ 1.选择σ 选择就是在关系R中选择满足给定条件的诸元组。 通过条件SdeptIS选择出系别…

5,串口编程---实现简单的用串口发送接收数据

单片机通过串口向PC机发送数据 PC机通过串口接收单片机发过来的数据 1.UART和USART的区别: USART支持同步通信方式,可以通过外部时钟信号进行同步传输,而UART仅支持异步通信方式 本开发板STM32F103ZET6有5个串口,用串口1作调试串口,因为串…

【算法实战】每日一题:设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形,且使用矩形不能超出边界

题目 设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形建筑物侧墙,且矩形不能超出边界。 核心思路 考虑这种结构 前面递增后面一个与前面的某个高度一致,这时候考虑最下面的覆盖(即都是从最下面向上覆盖&#…

进程互斥经典问题(读写者问题、理发店问题)

目录 读写者问题 问题描述 问题分析 进程互斥问题三部曲 读者写者算法实现 一、找进程——确定进程关系 二、找主营业务 三、找同步约束 a.互斥 b.资源 c.配额 理发店问题 问题描述 问题分析 进程互斥问题三部曲 理发店问题算法实现 一、找进程——确定进程…

特朗普竞选带火PoliFi,以Bitget为例

以特朗普系列Meme币为代表的政治金融(PoliFi)概念币市场正在掀起热潮,前美国总统特朗普(Donald Trump)在本月稍早公开力挺加密货币,接着又在周二宣布接受比特币、以太币、SOL、USDC、DOGE…等政治献金,让相关通证高涨。 据CoinGecko数据&…

鲜花门店小程序开发流程:详细教程,让你轻松掌握

想要开发一款专属于自己鲜花门店的小程序吗?不知道从何开始?别担心,本文将为你提供详细的开发流程,帮助你轻松掌握。 1. 注册登录乔拓云网并进入操作后台 首先,你需要注册并登录乔拓云网,然后进入操作后台…

简单随机数据算法

文章目录 一,需求概述二,实现代码三、测试代码四、测试结果五、源码传送六、效果演示 一,需求概述 系统启动时,读取一组图片数据,通过接口返回给前台,要求: 图片随机相邻图片不重复 二&#…

AcWing 2568:树链剖分 ← 线段树+DFS

【题目来源】https://www.acwing.com/problem/content/2570/【题目描述】 给定一棵树,树中包含 n 个节点(编号 1∼n),其中第 i 个节点的权值为 ai。 初始时,1 号节点为树的根节点。 现在要对该树进行 m 次操作&#xf…

力扣225. 用队列实现栈

Problem: 225. 用队列实现栈 文章目录 题目描述:思路Code 题目描述: 思路 1.对一个queue模拟栈的操作,同时用一个int类型的变量topElem记录每次每次队列队尾的元素(也即是模拟stack中的stack的栈顶元素); 2…

Linux之单机项目部署

1、虚拟机(VMware)创建Linux系统 1.1、创建虚拟机 1.2、配置虚拟机IOS映射文件 1.3、虚拟机内部相关配置 等待加载即可,加载完后会弹出图形化界面,如图: 注意:一般我们做为管理员使用ROOT账号来操作&#x…

Tomcat端口配置

Tomcat是开源免费的服务器,其默认的端口为8080,本文讲述一下如何配置端口。 最后在浏览器中输入localhost:8888即可打开Tomcat界面

怎样打造一份个性化画册呢?我来教你

在这个数字化的时代,传统的照片已经不能满足我们对个性化回忆的需求。个性化画册,不仅能够承载我们的记忆,还能展现自我风格。今天,就让我来教你如何打造一份属于自己的个性化画册。 1.要制作电子杂志,首先需要选择一款适合自己的…

IT人的拖延——一放松就停不下来,耽误事?

拖延的表现 在我们的日常工作中,经常会面对这样一种情况:因为要做的Sprint ticket比较复杂或者长时间的集中注意力后,本来打算休息放松一下,刷刷剧,玩玩下游戏,但却一个不小心,没控制住时间&am…

【全开源】JAVA同城搬家系统源码小程序APP源码

JAVA同城搬家系统源码 特色功能: 强大的数据处理能力:JAVA提供了丰富的数据结构和算法,以及强大的并发处理能力,使得系统能够快速地处理大量的货物信息、司机信息、订单信息等,满足大规模物流的需求。智能路径规划&a…

常见5大开发进度盲点问题及解决方案

在软件开发项目中,识别并解决常见的进度管理盲点问题,对于确保项目按时、按预算、高质量完成至关重要。它直接关系到项目能否顺利进行,忽视任何一个问题,都可能导致项目延期、成本超支、质量下降,甚至项目失败。 因此&…