swagger 入门指南

news2024/10/6 8:39:43

1. 写在最前面

最近在负责的服务,出现了客户接二连三的投诉 api 参数难以理解的问题。本着从「根本上解决问题」的思路,笔者思考了以下方案:

  • 简化难以理解的参数,重新设计一版 api

  • 优化 api 文档,更易于用户理解

1.1 方案选择

1.1.1 优缺点分析:

  • 重新设计 api 是不行的,时间紧,任务重,需求已经排到了下个月,无法投入更多的资源做 api 的重构

  • 优化 api 文档也不行,原始的 api 参数设计的过于复杂,简单的从优化描述 api 入手无法根治问题,治标不治本

1.1.2 最终方案

  • 抽象现有的 api 参数,对客户隐藏其不需要的部分

  • 基于 swagger 构建一个客户填写必须参数,生成复杂 body 的 server

🤔 本着「不能重复踩坑」的原则,下次有设计 api 的机会,一定要多站在用户侧考虑,减少想当然的「开发者」思维(ps: 本次 api 设计非笔者完成

2. 安装

为什么把 「安装」单独拎出来,是因为笔者用的是 m1 的芯片,安装的时候,踩了个小坑,不过是小问题,但是列出来可以让其他需要安装的小伙伴做个参考。

完整的安装步骤:

 download_url=$(curl -s https://api.github.com/repos/go-swagger/go-swagger/releases/latest | \\n  jq -r '.assets[] | select(.name | contains("'"$(uname | tr '[:upper:]' '[:lower:]')"'_arm64")) | .browser_download_url')

 sudo curl -o /usr/local/bin/swagger 

sudo chmod +x /usr/local/bin/swagger

注意:要选择跟本机匹配的芯片,笔者这里选择的是 _arm64

3. 方案实施

在介绍最终的 sever 之前,先来浅浅的介绍一下 swagger 。笔者之前对于 swagger 的印象单纯的停留在可以在「代码里写符合 swagger 格式的注释,然后生成 api 文档」,这样文档和代码是一体的,方便了版本回溯和内容维护。

但是,实时上 swagger 的功能远远不知于此。 swagger 提供了两种能力:

  • Generate spec from source

  • Generate code from spec

注:笔者之前对 swagger 的认知停留在了「Generate spec from source」

除此之外,swagger 给 api 开发者提供了两个很好的开发思路:

  • Design first approach 即设计先行

    基于这个思路,前后端在合作开发时,前端可以基于 swagger mock 的数据进行开发,不必强依赖后端准备好接口

  • Code first approach 即代码先行

    基于这个思路,后端可以将版本迭代的背景信息嵌入代码中,重新生成 swagger 文档,这个就是代码先行

3.1 generate code from spec 介绍

3.1.1 生成 & 运行 demo

spec 描述文件:

---
swagger: '2.0'
info:
  version: 1.0.0
  title: Greeting Server
paths:
  /hello:
    get:
      produces:
        - text/plain
      parameters:
        - name: name
          required: false
          type: string
          in: query
          description: defaults to World if not given
      operationId: getGreeting
      responses:
        200:
          description: returns a greeting
          schema:
              type: string
              description: contains the actual greeting as plain text
  • 新建目录 GreetServer

  • 将上述的内容拷贝为 swagger.yaml 文件,并放在 GreetServer 目录下

  • 运行如下命令

     swagger generate server  -f swagger.yaml
    
  • 即可得到如下目录结构的文件

    在这里插入图片描述

  • 如下图所示,就得到一个可以快速运行的 demo

    在这里插入图片描述

    注:上述 demo 的运行效果返回的是该方法还没有实现

  • 快速在上述 demo 中增加逻辑的方式,过滤 「safe」关键字,在代码中简单返回 body

    在这里插入图片描述

  • 运行效果

    在这里插入图片描述

3.2 实践之生成复杂 body

笔者遇到的问题是:

  • api body 的 json 层级复杂且手动拼写的时候很容易出错

  • api body 不同功能的参数混合在同一大的 body ,用户在理解上比较复杂

  • api body 的参数校验错误,很多是通过 ncs 异步回调通知的方式,客户在集成的时候很难发现问题

解决方法:

  • 按照功能维度,场景化 api 的 body 体同时精简 body 生成的必须参数,减少客户理解的成本

  • 生成 body 的过程中同步校验 body 的合法性,给客户返回直接可「自修正」的错误描述

使用例子说明:

  • 用户使用极简的 rqst body

    在这里插入图片描述

  • 返回可以直接调用的 resp boy

    在这里插入图片描述

4. 碎碎念

二阳 + 要好的小伙伴选择回归二线工作,总觉得心情跟梅雨季的天气一样闷闷的

  • 既然相遇是偶然,又何必在意分别时的突然呢

  • 我们终究会在各种事与愿违中学会自渡

  • 有个思想者叫做克里希那穆提,他写了一段话说,夕阳没有意义,可是你对夕阳会感受深刻。好吃的东西没有意义,可是你吃到好吃的东西的时候会感受深刻。 他说人生也是一样的,人生没有意义,可是你会感受深刻。他说这不表示它不值得活下去,它值得活,可它跟意义无关。

5. 参考资料

  • go-swagger install

  • go-swagger tutorials

  • go-swagger 使用说明

  • Generate Swagger Doc Files From Go Code Using Go-swagger

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

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

相关文章

代码随想录算法训练营第四十一天| 343. 整数拆分、96.不同的二叉搜索树

整数拆分 题目链接:力扣 确定dp数组(dp table)以及下标的含义 dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。确定递推公式 然后有两种渠道得到dp[i]: 一个是j * (i - j) 直接相乘。 一个是j * d…

unit4

目录 carpenterovertakeremainderobjectivepasturedespitegulfshepherdinteriorchorusoppressgrinprofessionalresistantfosterleapembarkneutralelasticcirculateintimidatechopprimarystirappraisallayoutsurvivalentertainmoanlocatepublishpacehearingexplosivecricketvolt…

stable-diffusion-webui 快捷安装教程

简介 stable-diffusion-webui 是一个用来装载Stable Diffusion 模型的网页,可以方便的调用模型生成图片。 stable-diffusion-webui的github地址为:https://github.com/AUTOMATIC1111/stable-diffusion-webui 这个库的依赖很多,虽然代码里面有…

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植 1、准备工作 a、用stm32cubemx新建一个工程。 时钟配置 st-link提供8M的mco输出,所以配置hse 8m,sysclk最高100M,设置如下: 配置LED 连接pa5,设…

机器学习-进化算法

进化算法 遗传算法(Genetic Algorithm,GA)crossovermutation 进化策略(Evolutionary Strategies,ES)基因编程(Genetic Programming)Multi-objective Evolutionary Algorithms 遗传算…

certbot 申请免费SSL证书、自动续期

简介 Certbot是一个免费、开源的软件,是Let’s Encrypt的客户端,Let’s Encrypt是证书颁发机构,它们之间使用ACME协议通信,Certbot是Lets Encrypt众多客户端的其中之一,Let’s Encrypt官网推荐CertBot,它能…

AIGC:关于人工智能的那些事

文章目录 前言人工智能发展史起步阶段:20世纪50年代至70年代知识工程阶段:20世纪80年代至90年代数据驱动阶段:2000年至今 人工智能包括哪些技术学习人工智能需要掌握的知识如何开发一个人工智能系统如何开发一个人脸识别系统人工智能未来发展…

mysql密码登录失败、服务启动失败和1045-Access denied for user ‘root‘@‘localhost‘

一、问题: 1.打开 navicate,双击localhost_3306,出现报错2002 - Can’t connect to server on ‘localhost’(10061) 2.查看mysql是否启动 控制面板——管理工具——服务 找到mysql服务,发现无法启动。 3.winR运行cmd&#xf…

windows install pandoc

文章目录 下载安装测试使用 下载 https://github.com/jgm/pandoc/releases 安装 pandoc-3.1.3-windows-x86_64.msi 直接双击一路默认即可。 但安装后并没有得到该命令,我们需要配置环境变量,找到安装的命令位置 C:\Users\XH\AppData\Local\Pandoc\p…

驱动多文件编译和驱动命令行传参

目录 1. 驱动的多文件编译 1.1. 准备两个文件 1.2. 修改Makefile文件 1.3. 执行Make命令生成.ko文件 2. 驱动模块传递参数 2.1. 传递一个参数 2.1.1. 函数原型分析 2.1.2. 撰写.c文件 2.1.3. 撰写makefile 2.1.4. 编译makefile并验证 2.2. 传递多个参数并使用modeinf…

线程的创建和使用(二)

1、线程的类和方法 Thread类是JVM用来管理线程的一个类,换句话说,每个线程都有唯一一个的Thread对象与之关联。 1.1、Thread的常见方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线程对象Thread(String name)创建线程…

【SpringCloud-5】gateway网关

网关是干啥用的就不用再说了。 sringcloud中的网关,第一代是zuul,但是性能比较差(1.x是阻塞式的,2.x是基于Netty的),然后有了第二代GateWay,基于Reactor模型 异步非阻塞。 springcloud网关就是一…

经理的工作岗位职责描述10篇

经理的工作岗位职责描述(篇1) 1、销售工具的开发和制作 2、负责各类媒体、渠道的软文撰写,产品信息推广; 3、筹办重点客户,潜在客户的讲座论坛会议; 4、市场推广活动:展会seminar oadshow等活动 5、产品上市沟通&#…

IIC协议通信解析,内附完整代码。

一:硬件接口 1.1:功能引脚 1.2:IIC总线通信注意事项 二:通信协议 (1)空闲状态: (2)起始位: (3)有效数据位 (4&#x…

最近跳槽,压力真大...

前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。 每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎…

【玩转Docker小鲸鱼叭】MacOS系统配置Docker镜像加速器

当我们通过 docker pull拉取镜像时,如果不指定仓库,默认从 Docker Hub (docker.io)获取镜像,而国内用户访问Docker Hub仓库时,通常速度很忙,经常超时导致拉取镜像失败,所以通常要通过…

上海亚商投顾:沪指震荡调整 CPO概念股持续大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指今日震荡调整,保险等权重板块走低,上证50跌超1.5%,创业板指较为抗跌。CPO、…

【新固态格式化】

新固态格式化 初始化硬盘 从管理进入磁盘管理 Windows 7及其以后的系统建议使用GPT MBR 是 Master Boot Record 的缩写,是一种传统而常用的磁盘布局。GPT 是 Globally Unique Identifier Partition Table 的缩写,是一种与 UEFI 相关的新磁盘布局。其…

Day23 实战篇 ——Jmeter压力测试实战

Day23 实战篇 ——Jmeter压力测试实战 文章目录 Day23 实战篇 ——Jmeter压力测试实战一、分布式压测原理二、分布式环境配置Slaves机器配置Master机器配置参数化文件配置三、分布式压测执行Slave机器执行Master机器执行四、常见问题处理问题一问题二问题三问题四项目中使用Jme…

redis缓存设计-Redis(八)

上篇文章介绍了redis缓存设计,热点key,bigkey注意事项。 原创 redis缓存设计-Redis(七)https://blog.csdn.net/ke1ying/article/details/131268967 命令使用 hgetall,lrange,smembers,zrange…