Manweill / swagger-axios-codegen

swagger client to use axios and typescript
MIT License
306 stars 83 forks source link

feat: 添加响应类型包装器 #190

Closed WangMingHua111 closed 8 months ago

WangMingHua111 commented 9 months ago

支持响应类型包装,解决 后端文档与接口返回不一致问题

Manweill commented 9 months ago

@WangMingHua111 有没有响应的示例,是解决了什么问题,目前看出是做了什么修改

WangMingHua111 commented 9 months ago

image

修改真实的响应类型为一个格式化type

WangMingHua111 commented 9 months ago

@Manweill

WangMingHua111 commented 9 months ago

image

产生的原因是网关层格式化了返回的数据,导致与真实类型不匹配(真实数据与swagger返回类型不匹配)

Manweill commented 9 months ago

这种的话,我这边建议时候在 axios(或者其他的 request 请求客户端)的响应流过滤器里面直接处理就可以了。

即,axos 的话 是在axiosInstance.interceptors.response.use中处理,例如网关层多包了一层给,那就在这里面做好返回数据的组装就好了,再把真实的数据返回.

例如你这里的话,那就是return {data:reponse.data.data}

你看下能不能足你需求

Manweill commented 9 months ago

贴一个我对接的一个工程的例子

axiosInstance.interceptors.response.use(
  (response) => {
    const config: any = response.config
    const data: ResponseBodyType = response.data
    if (config) {
      hideLoading()
    }

    if (data.success && data.code === 200) {
      return response
    } else if (response.data.code === 0) {
      return response.data
    } else {
      const code = data.code
      let errorMessage = ''
WangMingHua111 commented 9 months ago

有道理,我这边在响应拦截器中, 添加格式化代码,提取网关格式化后的data。

我这边依然建议支持包装返回的类型,因为目前我有一个需求,将所有的可选参数包装为必填参数。或者有更优雅的方式实现

示例: image

WangMingHua111 commented 9 months ago

这种的话,我这边建议时候在 axios(或者其他的 request 请求客户端)的响应流过滤器里面直接处理就可以了。

即,axos 的话 是在axiosInstance.interceptors.response.use中处理,例如网关层多包了一层给,那就在这里面做好返回数据的组装就好了,再把真实的数据返回.

例如你这里的话,那就是return {data:reponse.data.data}

你看下能不能足你需求

能满足要求,似乎是应该这样处理

WangMingHua111 commented 9 months ago

如果你这边不建议包装返回类型 我这边把这个提交关闭掉

Manweill commented 9 months ago

有道理,我这边在响应拦截器中, 添加格式化代码,提取网关格式化后的data。

我这边依然建议支持包装返回的类型,因为目前我有一个需求,将所有的可选参数包装为必填参数。或者有更优雅的方式实现

示例: image

应该是理解错误了,这个应该是 strictNullChecks这个控制,会严格准守 swagger 的定义。并且你在这里如果进行了包装,会不够灵活,这个写法留给开发自己控制就可以,个人感觉。所以这个用户有点不合理。你可以先看看strictNullChecks这个属性是否满足。

Manweill commented 9 months ago

即在返回值里面自行 as Required<T> 到指定类型。

WangMingHua111 commented 9 months ago

这仅能算一个一个业务需求,strictNullChecks 会导致整个项目中的代码不进行检查。在这里我希望是进行 api data 进行 bind 的时候不检查。 另外严格准守 swagger 的定义是有必要的,但由于项目组成员对ts不熟悉,导致了项目在构建过程中常出现大量的 type check 错误。所有做了一下业务向兼容。而在这种情况下 as Required 会对他们代码额外的负担。

WangMingHua111 commented 9 months ago

通过 responseTypeWrapper 参数我可以给项目打补丁,不然目前没有任何办法转换 返回的类型。

Manweill commented 9 months ago

最近有点忘,忘记看了~我再重新评估一下

Manweill commented 8 months ago

@WangMingHua111 这个pr还有合并的需求吗,如果有我这边重新打开一下

WangMingHua111 commented 8 months ago

重新打开了

WangMingHua111 commented 8 months ago

@Manweill