分享一个根据 swagger 自动生成 ts 代码的小工具

2018-11-30 09:54:49 +08:00
 ppddtt

https://github.com/zt8989/sisyphus-cli

sisyphus-cli(西西弗斯)

一个从 swagger 自动生成 ts 代码的工具

如何使用

安装 cli

npm install sisyhpus-cli -g

如何增加新的项目

  1. 新建文件夹如xxx-api
  2. sisyhpus init xxx-api初始化
  3. 查看如何更新代码

如何更新代码

  1. 进入相应文件夹如xxx-api
  2. 查看sisyhpus.json文件 file 路径是否执行对应 swagger 的地址
  3. 执行sisyhpus更新代码
  4. 执行npm run build打包
  5. 将 dist 的 js 和 d.ts 复制到项目或者使用npm publish发布

原理

sisyhpus-cli会根据 swagger.json 生成类似代码

class Api {
  constructor(request){
    this.request = request
  }

  function getDetail(pathParams, queryParams, bodyParams){
    return this.request({
      url: bindUrl('/detail', pathParams),
      method: 'GET',
      params: queryParams,
      data: bodyParams
    })
  }
}

如何引入

import Api from 'xxx-api';

编写适配器

由于生成的代码是按照 axios 的格式组织参数,所以针对不同的请求库,要做一层封装。 以fetch为例

function adapter(requestInstance) {
  /**
   *
   * @param {AjaxOptions} options
   */
  return options => {
    const baseUrl = '/api';
    let { url } = options;
    const { params, data, ...restParams } = options;
    url = baseUrl + url;
    if (params) {
      url = `${url}?${stringify(params)}`;
    }
    return requestInstance(url, { ...restParams, body: data });
  };
}

const api = new Api(adapter(request));

api.login({ useraname: xxx, password: xxx }).then(res => {})

QA

Q: 我遇到了中文的 model 怎么办?

A: 修改 java 中的注解,@ApiModel("xxx") => @ApiModel(description = "xxx")

TODO

4344 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX