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

简介: 哈喽,我是树酱。去年中旬的时候写过一篇关于如何更好管理 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.最后


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



相关文章
|
1天前
|
安全 API 开发者
智能体-Agent能力升级!新增Assistant API & Tools API服务接口
ModelScope-Agent是一个交互式创作空间,它支持LLM(Language Model)的扩展能力,例如工具调用(function calling)和知识检索(knowledge retrieval)。它已经对相关接口进行了开源,以提供更原子化的应用LLM能力。用户可以通过Modelscope-Agent上的不同代理(agent),结合自定义的LLM配置和消息,调用这些能力。
|
4天前
|
存储 自然语言处理 搜索推荐
Elasticsearch 8.10 同义词管理新篇章:引入同义词 API
Elasticsearch 8.10 同义词管理新篇章:引入同义词 API
12 0
|
5天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
13天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
23 1
|
13天前
|
SQL 数据管理 API
数据管理DMS产品使用合集之阿里云DMS提供API接口来进行数据导出功能吗
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
13天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里函数计算中开启函数计算 API 接口如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
112 6
|
16天前
|
前端开发 Java 测试技术
IDEA 版 API 接口神器来了,一键生成文档,贼香!
IDEA 版 API 接口神器来了,一键生成文档,贼香!
46 0
|
17天前
|
API 开发者
邮件API接口使用的方法和步骤
AOKSEND指南:了解和使用邮件API接口,包括选择适合的接口(如AOKSEND、Mailgun、SMTP),获取访问权限,配置发件人、收件人及邮件内容,调用接口发送邮件,并处理返回结果,以高效集成邮件功能。
|
17天前
|
前端开发 JavaScript API
React的Context API:全局状态管理的利器
【4月更文挑战第25天】React的Context API解决了深层组件间状态共享的难题,提供全局状态管理方案。通过`Provider`和`Consumer`组件,或结合`useContext` Hook,实现状态在组件树中的传递。最佳实践包括避免过度使用,分离逻辑,以及在必要时与Redux或MobX结合。Context API简化了数据传递,但需谨慎使用以保持代码清晰。
|
19天前
|
JSON JavaScript API
访问REST API:在Vue中消费和管理远程数据
【4月更文挑战第23天】本文探讨了在Vue应用中高效访问REST API的方法,包括选择合适的API、使用Axios或Fetch发送请求、封装API服务、处理响应和数据、错误管理及性能优化。关键点在于创建服务层封装请求,使用计算属性和方法处理数据,以及实施错误处理和性能提升策略。通过这些最佳实践,开发者能更好地管理和消费远程数据,构建出动态、响应式的Vue应用。