如何更好管理 Api 接口(续)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 哈喽,我是树酱。去年中旬的时候写过一篇关于如何更好管理 Api 接口。最近有朋友问我,我们都是根据Swagger文档,然后通过“阅读”swagger文档中每个微服务包含的CRUD(增刪查改)等API,再通过“手动”撸出各种service文件,以此达到封装的结果。但是这样会暴露一些问题,如下👇

微信截图_20220514232654.png


哈喽,我是树酱。去年中旬的时候写过一篇关于如何更好管理 Api 接口。最近有朋友问我,我们都是根据Swagger文档,然后通过“阅读”swagger文档中每个微服务包含的CRUD(增刪查改)等API,再通过“手动”撸出各种service文件,以此达到封装的结果。但是这样会暴露一些问题,如下👇


  • 如果接口发生变更,比如接口从v1迁移到v2版本,那需要进行大量的改造
  • 每增加一个项目,我都是需要封装一套service,重复造轮子不亦乐乎?
  • 团队加入新成员,编写重复的接口封装等


那有什么办法可以解决上述的问题? 方法是有的,本质上通过程序自动化去生成各种service文件,解放双手。那具体怎么做呢?我们可以通过解析swagger接口文档的结构


1.什么是 Swagger / OpenAPI ?


在聊解析文档之前,我们首先需要先了解一下 OpenAPI  👇


微信截图_20220514232710.png


OpenAPI规范,也称作OAS,是一种API文档标准


通过 OpenAPI 规范来定义您的 API,您就可以用文档生成工具来展示您的 API,甚至可以使用代码生成工具来自动生成各种编程语言的服务器端和客户端的代码。


👧 啊乐同学:那openAPI与swagger之间有是什么关系?


OpenAPI 始于 Swagger 规范,Swagger 规范已于2015 年捐赠给 Linux 基金会后改名为 OpenAPI,并定义最新的规范为 OpenAPI 3.0

本质上你可以理解为前者是规范,后者则是实现规范的工具 👇


  • OpenAPI = 规范
  • Swagger = 实现规范的工具


👦 啊乐同学:那么一个通过OpenAPI规范实现的对象是什么样子的呢?


具体主要包括以下这些字段信息(指的是OpenAPI 3.0)


微信截图_20220514232726.png


如果你想实时预览OpenAPI在线编辑的效果,可以尝试使用 Swagger Editor


微信截图_20220514232758.png


👦 啊呆同学:我看有两种规范,OAS2与OAS3,这两种有什么区别呢?


OAS2是Swagger2的简称,上文提到,自 Swagger 规范捐献给linux之后,将Swagger规范重命名为OpenAPI规范,就是我们提到的OAS3。下图是两者的区分👇


微信截图_20220514232811.png


推荐阅读:


2.如何解析 Swagger / OpenAPI ?


梳理完OpenAPI规范结构,接下来我们就需要通过解析OpenApi文档结构来生成我们的service文件


我在社区找到目前的两种解决方式 👇


2.1 @umijs/plugin-openapi插件


umijs封装了一个openapi插件,通过输入一个 openapi 的规范文件,就可以完成自动化创建service。


这个规范文件我们在通过swagger-ui的界面中可以获取


微信截图_20220514232833.png


然后把这个复制swagger的url到openapi的配置中(schemaPath参数),可以参考下图👇


微信截图_20220514232850.png


然后执行命令行就可以自动生成以下目录结构serves


微信截图_20220514232901.png


这里以宠物商店的DEMO API 文档为例,看下生成的接口封装成什么样子


微信截图_20220514232918.png


同时在serves中我们也会生成 typings.d.ts 文件,包含了openapi中的定义

目前该工具的劣势在于,重度绑定了umi且对中文支持不友好。如果你觉得不适合内部的技术栈,可以参考该工具的实现思路,然后在它的基础上自己造轮子


2.2 本地化工具生成


OpenApi社区开源了OpenApi Generator,我们可以通过 OpenAPI Generator,通过提供OpenAPI 规范(上文提到的OAS2和OAS3)来自动生成 API 客户端库、文档及配置。


比如我们前端依赖axios作为请求库,那么我们可以通过指定类型来生成ts+axios的请求相关的代码


具体使用请查阅 🔗 github - openapi-generator


如果你是前端并且对java并不熟悉的童鞋,直接使用会收到技术栈限制,因为它提供的是一个JAR包,虽然也有提供cli工具,但是只支持yml格式解析


那么有没有更编辑的方式,可以不依赖环境去使用呢?


这里提供一个工具,方便你直接使用: Apifox


Apifox不仅支持mock功能和接口调试,我发现还有个代码生成功能,代码生成引擎使用的也就是我们提到的openapi-generator,可以根据接口/模型定义,自动生成各种语言/框架(如 TypeScript、Java、Go、Swift 等130 种语言及框架)的业务代码,比如接口请求代码


微信截图_20220514232932.png


上图是Apifox的生成代码的界面,这里以TypeScript语言+axios请求库为例,我们还可以选择我们导出的代码包含的内容,比如只需要仅接口代码或仅模型等


3.最后


如果你有更好的实现方式,也可以在评论区留言,也可以加我微信,我们一起喝茶🍵 讨论



相关文章
|
28天前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
|
13天前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
|
22天前
|
SQL 存储 数据处理
|
25天前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
27天前
|
监控 API 数据安全/隐私保护
​邮件API触发式接口分析?邮件API接口好评榜
邮件API在企业通信和营销中至关重要,通过自动化邮件发送流程提升效率与客户满意度。本文解析邮件API触发式接口,即基于特定事件(如用户注册、购买产品)自动发送邮件的技术,能显著加快企业响应速度并增强用户体验。推荐市场上的优秀邮件API产品,包括SendGrid、Mailgun、Amazon SES、Postmark及新兴的AOKSend,它们各具特色,如高发送率、详细分析工具、灵活配置、强大的日志功能及用户友好的API接口,帮助企业根据不同需求选择最合适的邮件API解决方案。
|
1月前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
54 8
|
8天前
|
测试技术 API 数据库
电商API接口定制与开发系列之——商品详情接口介绍
——在成长的路上,我们都是同行者。这篇关于API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 在电商API接口定制与开发系列中,商品详情接口是至关重要的一部分,它直接关系到用户浏览商品、获取商品信息的关键环节。以下是对商品详情接口的详细介绍:
|
13天前
|
存储 数据采集 API
提升店铺好评秘籍:淘宝商品评论接口与电商 API 接口的深度解析
该接口名为item_review,用于获取淘宝商品评论信息,支持HTTP GET或POST请求,体验API为c0b.cc/R4rbK2。主要请求参数包括商品ID(num_iid)、排序方式(sort)、页码(page)。响应参数涵盖评论内容(rate_content)、评论日期(rate_date)、评论图片(pics)、买家昵称(display_user_nick)、商品属性(auction_sku)
|
18天前
|
API 开发工具 数据安全/隐私保护
【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID
【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID
|
1月前
|
开发框架 前端开发 API
使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理
使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理