Skip to content

使用 swagger json 数据自动生成 TypeScript 接口文件的 node 工具

License

Notifications You must be signed in to change notification settings

jinzhuming/swagger-node

Repository files navigation

相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。 前端经常抱怨后端给的接口文档与实际情况不一致。 后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。 但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。 所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。

发现了痛点就要去找解决方案。解决方案用的人多了,就成了标准的规范,这就是 Swagger 的由来。Swagger 很好,但是也显然存在一些问题。 在前端开发与后端项目联调的过程中,我们总避免不了要根据后端的接口文档(一般是Swagger)来定义前端的API调用代码,同时要根据接口文档中API请求参数, 返回参数等定义出前端使用的typescript类型定义,随着业务功能的增大,这项工作也越来越耗费前端开发人员的时间,然后而这项工作本来是可以通过自动化工具去完成的, 因为后端同学给出的接口文档中就已经包含了请求类型,方法名称,参数类型,返回值类型等定义,只需要通过工具依据固定的规则转化为前端代码即可。

生成接口示例

import {
  createApiInstance
} from '/tools/client/apiBuilder'

export const AppController_getTest = createApiInstance < {
    userName: any // 查询用户名
  },
  null >
  ('AppController_getTest', (userName) => {
    return {
      method: 'get',
      url: '/test',
      query: {
        userName
      },
      headers: {
        'Content-Type': 'application/json',
      },
    };
  });

createApiInstance 为一个自定义的接口调用函数,参数都传入函数后,可以函数内部使用 fetch、axios 或者更复杂的封装。

当然,这只是个非常简单的 demo,主要是实现这个想法,Swagger 各个版本协议都有很大的不同,如果要完整开发,需要非常深入的了解 Swagger 的协议。 同时目前只实现了 query 的简单兼容,其他的入参方式并没有实现。另外在类型定义上,目前是简单的写死,实际可以提取出 interface、enum 等类型,方便后续代码中调用。 一些公共的 ref 也没有做处理,所以仅供一个简单的参考。

About

使用 swagger json 数据自动生成 TypeScript 接口文件的 node 工具

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published