在上一篇文章我们讲述了如何去管理我们实际项目中关于请求部分的接口定义和封装,更推荐的是统一化、自动化。在本文中将重点阐述前端是如何集成这类的开发工具。如果你还没预览上一篇文章,请回到上一篇点击传送
一、原理介绍
其核心原理很简单,就是把swagger.json
的数据格式转化成我们需要的请求文件。所以我们只需要发送一个请求,通过nodejs
的fs模块进行写入即可。
swagger.json:
二、进阶-设计成CMD命令交互式
1.推荐技术栈掌握
这里我们需要掌握几个插件库的技术栈,这也与我们通常项目脚手架生成的文件的原理一致。即:
commander
:通常用来定义命令的接收参数,比如 xx --version;
download-git-repo
:拉取指定项目的git地址到本地;
inquirer
:通常用来做一些shell的交互;
ora
:通常CMD loading;
child_process
:输出shell命令
2.结果设计
我们在设计内容一定是用户思维,先定义使用方式,再倒推逻辑实现:
# 全局安装swagger-ts插件
npm i yh-swagger-ts -g
# 添加swagger api 服务
yh-swagger -a
# 更新swagger api 服务
yh-swagger -u
# 查询swagger api版本
yh-swagger -v
第一次添加时需要声明地址、文档地址、api服务名称
后续在该目录即可通过交互式命令进行选择即可
无论是第一次添加,还是后续更新,都会自动推到我们内部的npm镜像仓库,展示:
3. 过程开发
到这里前面的基本原理大家也都懂了吧,接下来说明一下 git template基础模板
都有哪些内容
其实主要就是一个核心的main.ts
,还一个就是readme.md
文件.
readme.md
文件一般是对项目进行说明的作用,这里定义了一些特殊的字符,比如@yh-swagger/xxx是用来replace替换字符说明的,还有swagger文档链接也会在这里面进行替换。
main.ts
主要就是用来接收axios实例,暴漏模版中api
和type
类型的作用。因为生成的ts请求文件中不能各自引入axios
请求方法,否则的话,一些请求拦截,统一的请求处理就会有问题。因此,设计上我们希望axios
是可以由项目端传输过来的。
这样的话,不管我每个服务是不是在一起,我也能全局共享一个axios实例了。
// filePath: user-api/main.ts
import * as types from './swagger-utils/index'
import * as Api from './swagger-api/index'
interface PostData {
url: string;
data?: any;
}
interface Request {
$get<T>(PostData:PostData):(Promise<T>)
$post<T>(PostData:PostData):(Promise<T>)
$delete<T>(PostData:PostData):(Promise<T>)
$put<T>(PostData:PostData):(Promise<T>)
}
let request:Request;
export function setRequest(requestInstant: any){
request = requestInstant;
}
export function HttpRequest(){
return {
$get: request.$get,
$post: request.$post,
$delete: request.$delete,
$put: request.$put,
}
}
export type SwaggerResponse<R> = R
export {
types,
Api
}
开源git:swagger-ts-api
希望大家点个star,谢谢。。。
加首页微信,进vue社区微信群~