umi配合Apifox实现openapi-generator和接口mock

背景

前端技术栈是umi+react+ts,后端接口更新频繁,前端侧还要再维护一遍数据结构,通过阅读接口文档每次手动更新interface的方式过于浪费时间,需要新建多个service,且只能配合接口管理工具去阅读后端的注释等等问题。 接口管理工具用的是ApiFox,使用环境来做开发/测试环境区分,使用服务的概念来做不同模块的区分,区别就是不同服务的拼接前缀不同。

服务和环境的区别

使用场景示例:

复制代码
环境:
  开发环境
  测试环境
  预发布环境
  正式环境

服务:
  用户服务(user.xxx.com):登录等接口
  交易服务(trade.xxx.com):交易相关接口
  直播服务(live.xxx.com):直播相关接口

Umi的openapi-generator方案

umi有内置的openapi-generator方案,包为@umijs/max-plugin-openapi,如果是初始化的 ant pro 的模板项目,默认就有 openapi 功能,不用自己额外配置 plugins: ['@umijs/max-plugin-openapi'],否则需要在.umirc.ts文件中先引入插件。

注意:@umijs/plugin-openapi插件是旧版umi使用,新版已经不用这个包了。

再配置openApi的具体内容,openApi支持配置一个数组,方便多个服务配置。

也支持通过hook钩子自定义方法名和类名

bash 复制代码
   或本地地址: schemaPath: join(__dirname, 'oneapi.json'),

在 package.json 的 scripts 中增加一个命令。

json 复制代码
"openapi": "umi openapi",

配合ApiFox管理工具

注意:要通过ApiFox的生成代码工具,而不是导出,导出的内容和生成代码的内容不一致,配合@umijs/max-plugin-openapi会报错。

还需要把项目的唯一标识打开:

之后将openAPI格式URL配置到项目中即可。

问题

大坑: 生成的项目中的package.json的文件一定要包含name!

因为使用ApiFox分了服务,拉下来的接口是不带服务前缀的,需要自己进行前缀拼接,apiPrefix: ''/hcsp-gateway/baseApi/v1''

PS:这里要写两个引号,否则自动拼接生成的会是一个变量而不是字符串。

这里还存在一个问题,ApiFox按照目录拉取接口报错,目前来看只能选择生成代码形式,和ApiFox技术人员沟通后,等待他们一个月内上线按照目录生成代码功能。现阶段不同的服务先全量拉取,通过修改apiPrefix拼接服务。

为什么不用umi的mock方案

使用ApiFox分了服务,也导致MOCK功能也只生成接口部分,并没有前缀,前缀需要自己拼接。这里有两种方案,1. 使用umi的本地MOCK方案,通过代理修改拼接前缀,但是由于mock文件都在一个目录下,如果是名称重复的接口,则不能拥有MOCK 2.使用Apifox的mock方案,优点是可视化,mock类型更精确,可以按照服务mock。

ApiFox的mock方案

apifox.com/help/api-mo...

TODO

umi的openapi-generator方案有很多缺陷,比如大部分open-api的API都不能用。且每次更新是全量更新,不能选择性更新,也不清楚每次都新增了什么,这里留个钩子,计划之后要自己基于openapi-generator库二次开发,加上以上功能:

  • 增量提示
  • 批量选择更新
  • 友好的promat
  • 按服务生成代码

openapi-generator

AntdPro的openapi-generator配置

相关issue:

github.com/umijs/plugi...

github.com/umijs/umi/i...

github.com/umijs/umi/i...

相关推荐
酉鬼女又兒21 分钟前
零基础快速入门前端DOM 操作核心知识与实战解析(完整汇总版)(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯·js
喝拿铁写前端1 小时前
一套面向 Web、H5、小程序与 Flutter 的多端一致性技术方案
前端·架构
yaaakaaang1 小时前
(一)前端,如此简单!---下载Nginx
前端·nginx
牛奶1 小时前
为什么全国人民都能秒开同一个视频?
前端·http·cdn
KongHen022 小时前
uniapp-x实现自定义tabbar
前端·javascript·uni-app·unix
汪子熙2 小时前
TS2320 错误的本质、触发场景与在 Angular / RxJS 项目中的系统化应对
前端·javascript·angular.js
我命由我123452 小时前
React - BrowserRouter 与 HashRouter、push 模式与 replace 模式、编程式导航、withRouter
开发语言·前端·javascript·react.js·前端框架·html·ecmascript
Younglina2 小时前
用AI全自动生成连环画?我试了,效果惊艳!
前端·ai编程·claude
Devin_chen2 小时前
ES6 Class 渐进式详解
前端·javascript
小番茄夫斯基2 小时前
前端开发的过程中,需要mock 数据,但是走的原来的接口,要怎么做
前端·javascript