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

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

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

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

相关文章

鸿蒙HarmonyOS实战-Stage模型(信息传递载体Want)

🚀前言 应用中的信息传递是为了实现各种功能和交互。信息传递可以帮助用户和应用之间进行有效的沟通和交流。通过信息传递,应用可以向用户传递重要的消息、通知和提示,以提供及时的反馈和指导。同时,用户也可以通过信息传递向应用…

FPGA 第4章 摄像头Bayer转rgb

参考文献 彩色MT9V034摄像头 Bayer转rgb FPGA实现 https://www.cnblogs.com/hqz68/p/10413896.html 文章目录 前言Bayer转rgb算法解析 总结 前言 Bayer格式是相机内部的原始数据, 一般后缀名为.raw。 对于彩色图像,一般是三原色数据,rgb格式。但是摄像头一个像素…

【linux-IMX6ULL-LED字符驱动框架完善】

目录 1.简介2.前置知识2.1 重要函数及结构体2.2 程序框架流程 3. 代码详解: 1.简介 在上节,我对linux-IMX6ULL-字符设备驱动简单框架实验进行了说明和构建,但是也存在几个问题; 需要手动指定设备号,不能自…

TCP 与 UDP

0. tcp 与 udp 的 异同特性 TCPUDPname传输控制协议用户数据报协议面向连接? 需要 传输数据前建立连接传输完毕后断开连接不需要可靠的传输数据? 可靠 有确认机制(三次握手) 有确认、窗口、重传、拥塞控制的机制保证数据可靠传输…

操作视频号小店,新手最关心的问题,一篇给你讲解清楚!

大家好,我是电商小V 新手去做视频号小店的时候,心里面一定是有很多疑问的,会反复咨询一些最关心的问题,因为他们要做好准备,以防后续做店过程中出现问题,其实新手关心的问题就那几个,咱们今天就…

springboot2+mybatis-plus+vue3创建入门小项目[学生管理系统]02[实战篇]

创建一个 vue 项目 创建这个新的文件夹 创建前端项目 eggbox 数据库 SQL CREATE DATABASE IF NOT EXISTS egg DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; USE egg;CREATE TABLE stu (id INT AUTO_INCREMENT, -- 自增主键name VARCHAR(64) NOT NULL, -- 非空姓名字段&a…

前端传参的三种方式

1、params 传参 参数拼接在地址 url 的后面给后台&#xff1b;地址栏中可见 案例1 地址栏&#xff1a;https://xxxxxxxx/admin/clues/detail?id558 接口代码&#xff1a; export function getClueDetail(query: any) {return request<clueItem>({url: /clues/detai…

Java:图书管理系统

目录 一.book 1.在book包中的Book 类用来定义和引用书的名字&#xff0c;作者&#xff0c;价格&#xff0c;类型等。 2.在book包中的第二个类是BookList是用来构建书架&#xff0c;和书架上的初始书本&#xff0c; 二、ioperations 1.AddOperation (增加图书) 2.BorrowOp…

Linux环境基础开发工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 软件包管理器-yum 什么是软件包及安装方式 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理…

数据结构——栈(详细分析)

目录 &#x1f349;引言 &#x1f349;栈的本质和特点 &#x1f348;栈的基本操作 &#x1f348;栈的特点 &#x1f34d;后进先出 &#x1f34d;操作受限 &#x1f34d;动态调整 &#x1f348;栈的优缺点 &#x1f34d;优点 &#x1f34d;缺点 &#x1f349;栈的应用…

SQOOP详细讲解

SQOOP安装及使用 SQOOP安装及使用SQOOP安装1、上传并解压2、修改文件夹名字3、修改配置文件4、修改环境变量5、添加MySQL连接驱动6、测试准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库impo…

数据结构------二叉树经典习题2

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1.非递归的前序遍历 1.用栈来实现 2,前序遍历是根左右, 先是根节点入栈,,然后不为空时向左遍历,当为空时就返回向右遍历,右为空时直接出栈,依次循环即可. public void preOrderNot(TreeNode root){Stack<TreeNo…

科技赋能,打破视障人士的沟通壁垒

在探索如何增强盲人群体的社会参与度与幸福感的旅程中&#xff0c;盲人社交能力提升策略成为了不容忽视的一环。随着科技的不断进步&#xff0c;像“蝙蝠避障”这样的辅助软件&#xff0c;不仅在日常出行中为盲人提供了实时避障和拍照识别的便利&#xff0c;也在无形中为他们拓…

华为数通 HCIP-Datacom(H12-821)题库

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 BGP路由的Update消息中可不包含以下哪些属性&#xff1f; A、Local Preference B、AS Path C、MED D、Origin 答案&#xff1a;AC 解析&#xff1a;as-path和ori…

Java17 --- SpringCloud之Sentinel

目录 一、Sentinel下载并运行 二、创建8401微服务整合Sentinel 三、流控规则 3.1、直接模式 3.2、关联模式 3.3、链路模式 3.3.1、修改8401代码 3.3.2、创建流控模式 3.4、Warm UP&#xff08;预热&#xff09; ​编辑 3.5、排队等待 四、熔断规则 4.1、慢调用比…

【C++】09.vector

一、vector介绍和使用 1.1 vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改…

操作系统实验四 (综合实验)设计简单的Shell程序

前言 因为是一年前的实验&#xff0c;很多细节还有知识点我都已经遗忘了&#xff0c;但我还是尽可能地把各个细节讲清楚&#xff0c;请见谅。 1.实验目的 综合利用进程控制的相关知识&#xff0c;结合对shell功能的和进程间通信手段的认知&#xff0c;编写简易shell程序&…

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

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

【B站 heima】小兔鲜Vue3 项目学习笔记Day02

文章目录 Pinia1.使用2. pinia-计数器案例3. getters实现4. 异步action5. storeToRefsx 数据解构保持响应式6. pinia 调试 项目起步1.项目初始化和git管理2. 使用ElementPlus3. ElementPlus 主题色定制4. axios 基础配置5. 路由设计6. 静态资源初始化和 Error lens安装7.scss自…

Github 2024-05-24 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2TypeScript项目2JavaScript项目1Kotlin项目1C#项目1C++项目1Shell项目1Microsoft PowerToys: 最大化Windows系统生产…