Gin与OpenAPI(Swagger)的使用

news2024/11/19 0:49:00

一、背景

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框架路由代码, 参数、路由、响应数据格式都一键生成,自己再实现接口逻辑即可。

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

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

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

相关文章

Excel透视表:快速计算数据分析指标的利器

文章目录 概述1.数据透视表基本操作1.1准备数据:1.2创建透视表:1.3设置透视表字段:1.4多级分类汇总和交叉汇总的差别1.5计算汇总数据:1.6透视表美化:1.7筛选和排序:1.8更新透视表: 2.数据透视-数…

经典单链表OJ题

目录 1、轮转数组 2、返回倒数第k个节点 3、判断链表的回文结构 4、两个链表,找出它们的第一个公共结点 5、随机链表的复制 6、判断链表中是否有环 7、返回链表开始入环的第一个节点 1、轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k…

Influence blocking maximization on networks: Models, methods and applications

abstract 由于各种社会和贸易网络的不断出现,网络影响力分析引起了研究者的极大兴趣。基于不同的影响力传播模型,人们提出了许多网络影响力最大化的新模型和方法。作为传统影响力最大化问题的延伸和扩展,影响力封锁最大化问题已成为研究热点&…

Python文件和数据格式化-课后作业[python123题库]

文件和数据格式化-课后作业 一、单项选择题 1、文件句柄f,以下是f.seek(0)作用的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪…

spring cache(三)集成demo

一、demo 1、pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

银河麒麟服务器系统xshell连接之后主动断开,报错socket error event:32 Error:10053问题分析

银河麒麟服务器系统xshell连接之后主动断开&#xff0c;报错socket error event&#xff1a;32 Error&#xff1a;10053问题分析 一 问题描述二 系统环境三 问题分析3.1 与正常机器对比sshd文件内容以及文件权限3.2 检查同网段内是否配置多个相同的IP地址 四 后续建议 一 问题描…

每日一题《leetcode--398.随机数索引》

https://leetcode.cn/problems/random-pick-index/ 根据题目所知&#xff0c;所给的数组中有重复的元素。让我们随机输出给定的目标数字的下标索引。 typedef struct {int *sum;int length; } Solution;Solution* solutionCreate(int* nums, int numsSize) {Solution* obj (So…

数美滑块研究

周一&#xff0c;在清晨的阳光照耀下&#xff0c;逆向山脚下的小镇宁静而安详。居民们忙碌地开始一天的生活&#xff0c;而在爬虫镇子的边缘&#xff0c;一座古朴的道观显得格外神秘。 阿羊正静静地坐在青石长凳上&#xff0c;摸鱼养神。突然&#xff0c;一道清脆的声音在他耳…

【Arthas】阿里的线上jvm监控诊断工具的基本使用

关于对运行中的项目做java监测的需求下&#xff0c;Arthas则是一个很好的解决方案。 我们可以用来 1.监控cpu 现成、内存、堆栈 2.排查cpu飚高 造成原因 3.接口没反应 是否死锁 4.接口慢优化 5.代码未按预期执行 是分支不对 还是没提交&#xff1f; 6.线上低级错误 能不能不重启…

Go语言的构建标签(build tag)有何用途?

文章目录 原因解决方案示例代码总结 Go语言的构建标签&#xff08;Build Tags&#xff09;有何用途&#xff1f; 在Go语言中&#xff0c;构建标签&#xff08;Build Tags&#xff09;是一种特殊的注释&#xff0c;它用于控制Go编译器在构建代码时是否包含某些文件。这些标签可…

网页上的超链接复制到Excel中+提取出网址+如何保存

定义 超链接网页标题地址栏 使用的工具 2024年的WPS是不行的&#xff0c; 如果把知乎网页上的超链接复制到WPS中的Excel中&#xff0c;就会丢掉地址&#xff0c;只剩下网页标题 具体操作&#xff08;转载,在Excel2013上验证可行&#xff09; [1]启用【开发工具】&#xff…

HTTP content-type MIME 类型(IANA 媒体类型)

Content-Type(MediaType)&#xff0c;即是Internet Media Type&#xff0c;互联网媒体类型&#xff0c;也叫做MIME类型。在互联网中有成百上千中不同的数据类型&#xff0c;HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#xff0c;用于区分数据类型。最初MIME是用…

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

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

【Linux学习】深入探索进程等待与进程退出码和退出信号

文章目录 退出码return退出 进程的等待进程等待的方法 退出码 main函数的返回值&#xff1a;进程的退出码。 一般为0表示成功&#xff0c;非0表示失败。 每一个非0退出码都表示一个失败的原因&#xff1b; echo $&#xff1f;命令 作用&#xff1a;查看进程退出码。&#xf…

工具推荐:市面上有哪些带有ai问答机器人的SaaS软件

众所周知&#xff0c;SaaS&#xff08;软件即服务&#xff09;模式下的AI问答机器人已经逐渐成为企业、个人在办公、生活和学习中的辅助工具。ai问答机器人凭借高效、便捷、智能的特点&#xff0c;为用户提供了全新的交互体验。本文将推荐几款市面上好用的带有ai问答机器人的Sa…

2024年助贷CRM系统服务商汇总

数字化金融时代&#xff0c;助贷行业的发展呈现出蓬勃的态势。从各大助贷管理系统服务商的纷纷登场&#xff0c;为助贷行业提供了全方位的数字化解决方案。这些系统不仅助力企业实现业务线上化、透明化和合规化&#xff0c;更在助贷服务的专业化和贴心化上发挥着重要作用。以下…

【带你学AI】基于PP-OCR和ErnieBot的字幕提取和智能视频问答

前言 本次分享将带领大家从 0 到 1 完成一个基于 OCR 和 LLM 的视频字幕提取和智能视频问答项目&#xff0c;通过 OCR 实现视频字幕提取&#xff0c;采用 ErnieBot 完成对视频字幕内容的理解&#xff0c;并回答相关问题&#xff0c;最后采用 Gradio 搭建应用。本项目旨在帮助初…

UE5 像素流web 交互2

进来点个关注不迷路谢谢&#xff01; ue 像素流交互多参数匹配 主要运用像素流的解析json 状态&#xff1a; 测试结果&#xff1a; 浏览器控制台&#xff1a; 接下来编写事件传递 关注下吧&#xff01;

C语言 变量的存储类型

今天 我们来说变量的存储类型 变量的存储类型是指系统为变量分配存储区域的方式。 决定着变量存储空间在哪里分配&#xff0c;和变量的生存期、作用域存在着一定联系。 动态存储 函数调用发生时系统根据函数定义的需要动态为其分配的一个栈区&#xff0c;函数调用结束时释放…

刷代码随想录有感(76):回溯算法——全排列

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<int> tmp;vector<vector<int>> res;void backtracking(vector<int> nums, vector<int> used){if(tmp.size() nums.size()){res.push_back(tmp);return;}for(int i 0; i &l…