tsapi-from-yapi

1.2.0 • Public • Published

这是一个将yapi网站接口转换为本地typescript interface的工具 可以使用以下方式安装

npm install tsapi-from-yapi -g

或者

npm install tsapi-from-yapi --save-dev

这种方式需要在package包中补充命令,全局安装不用

"scrpit":{
	"tfy": "tfy"
}

在当前工作目录创建配置文件tfy.config.js来生成你的代码,如下所示:

module.exports = {
  urls: [
    'http://yapi.secondpath.com/api/interface/list'
  ],
  typeMerge: {
    text: 'string'
  },
  loginParams: {
    email: 'your email',
    password: 'your pwd'
  },
  cookie: 'cookie',
  isLdap: true,
  mode: 'reset',
  excludes: [/test/],
  importTile: '',
  importQuotation: `'`,
  template: val => {
    return {
      top: `import request from './request'`,
      frIndent: ' ',
      repeat: 'your code',
      bottom: '',
      filePath: './api/index',
      interfacePath: './interface/index',
      name: 'name',
      indent: '  ',
      isFieldDesc: true,
      mode: 'import'
    }
  }
}

执行命令进行生成,对应全局和局部安装

tfy

或者

npm run tfy
参数名 类型 默认值 说明
urls string[] yapi接口地址 可以f12获取接口地址填入,会递归完成所有请求,支持类似如下四种:
*/api/interface/list?*
*/api/interface/list_cat?*
*/api/project/list?*
*/api/group/list*
*/api/interface/get*
typeMerge object? 类型覆盖,会合并到原有类型上
loginParams object? 登录需要的参数
isLdap boolean? false 是否是LDAP方式登录 true丨false
cookie string? 网站的cookie,传cookie时可以不传loginParams,需自己登录获取cookie填入
mode string? update 生成模式 reset:重置模式,根据配置文件重新生成代码
update:更新模式,不删除,更新追加代码
add:追加模式,不删除,不更新,只追加代码
excludes regexp[]? 根据返回的path进行过滤
importTile string? '' 当interface为导入模式时,尾部的符号
importQuotation string? ' interface为导入模式时,引号的符号
template function(reponse) 代码模板,返回对象 reponse => object

template 返回字段说明

top:非必传,文件顶部文案,汇总文件对应的每个reponse,过滤掉重复

bottom: 同上,文件底部文案

repeat: 代码主体模板,可以根据占位符等信息填充

filePath: 生成文件地址,可不写后缀名

interfacePath: 非必传,可不写后缀名,ts接口文件地址,不传时会在filePath下生成filePath-i.d.ts文件,注意不要和filePath仅后缀名不同或者相同

name: 一个名字,如果是函数可用做函数名,不建议使用response内的信息填充,可能会有重复,要在此给定名字,再用占位符填充即可防止重名

indent: interface缩进符号,可以用双空格或者tab

frIndent: interface作为函数返回值使用时的间隔符号,可以设置为' '或者''

isFieldDesc: 字段注释,是否生成字段注释

mode: interface模式,import为导入模式,不传时为全局模式,为全局模式时若vscode检测不到需要进入interface文件保存一次即被检测到

req_username,req_headers,req_params,req_query,req_body,res_body 回传的内容,当不回传时使用response原始数据

repsonse结构说明

req_id 此条id

req_url 请求地址

req_desc 请求地址描述

req_username 请求地址开发者

req_headers 请求头

req_params 请求参数

req_query 请求查询参数

req_body 请求体

res_body 响应体

method 请求方法

以下是占位符,可以在template的repeat里被替换,是变量,不是字符串,使用时要使用reponse.$name等,根据需要使用,未使用的不生成对应interface

$req_headers: 请求头interface占位符

$req_headers_mark: 请求头是否必传占位符

$req_headers_markfr: 请求头作为函数返回值时是否必传占位符

$req_params: 同上

$req_params_mark: 同上

$req_params_markfr: 同上

$req_query: 同上

$req_query_mark: 同上

$req_query_markfr: 同上

$req_body: 同上

$req_body_mark: 同上

$req_body_markfr: 同上

$res_body: 同上

$res_body_mark: 同上

$res_body_markfr: 同上

$name: 返回的name占位符,当同个文件内有重名时,会在其后补充唯一id进行唯一区分

例子:

配置

{
  template: val => {
    return {
      top: `import request from './request'`,
      frIndent: ' ',
      repeat: `export async function ${val.$name}(data${val.$req_query_mark} ${val.$req_query}): Promise<${val.$res_body}${val.$res_body_markfr}>{
  return await request('${val.req_url}')
}`,
      bottom: '',
      filePath: `./src/${val.req_url.split('/').reverse()[1]}`,
      interfacePath: `a`,
      name: val.req_url.split('/').pop(),
      indent: '  ',
      isFieldDesc: true,
      mode: 'import'
    }
  }
}

生成

import { req$reqquery, res$resbody } from '../a.d'
import request from './request'
export async function getList(data: req$reqquery): Promise<res$resbody | null>{
  return await request('/getList')
}
...

如果只是js代码也可以使用本插件生成

github地址: https://github.com/dsmelon/tsapi-from-yapi

Package Sidebar

Install

npm i tsapi-from-yapi

Weekly Downloads

1

Version

1.2.0

License

ISC

Unpacked Size

31.2 kB

Total Files

3

Last publish

Collaborators

  • dsmelon