Manweill / swagger-axios-codegen

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

feat: 关于拓展AxiosRequestConfig定义能力 #197

Closed WangMingHua111 closed 2 months ago

WangMingHua111 commented 2 months ago

目前,axios请求的config,默认为: export interface IRequestOptions extends AxiosRequestConfig { /**

假如我想要 拓展 security 的定义为: security?: Record<string, 'md5' | 'sha1' | 'aes' | 'des'|'base64'|'sm3'>; 还有一种情况时,根据实际情况 AxiosRequestConfig 可能还会拓展诸如 upload 等配置,又当如何处理?

Manweill commented 2 months ago

意思是想自定义往 IRequestOptions 增加参数吗?当前可以通过 typescript 的全局模块定义重写这个 type 。当然,也可以设计一个方法、机制来处理这个内容都是没有问题的。

upload 配置是指什么呢

WangMingHua111 commented 2 months ago

自定义往 IRequestOptions 增加参数? 是的。我此前使用过 typescript 的全局模块定义重写这个 type,这算是一种很好方式。 upload 代表通过axios拦截器拓展 【上传文件】的能力,在未来可能还需要一个【重试次数】的能力,这时候就需要一个额外的参数。这里只是比喻。

image 目前,通过重写 security 定义,但实际上并不会生效。所以我会在这个库中移除 security 参数,并设计一个方法、机制来处理这个IRequestOptions内容。

关于删除 IRequestOptions.security 这点,您这边是否同意这个观点,删除的原因是:此类型太易变了。

关于 【设计一个方法、机制】,我这边建议是添加 【requestOptionsWrapper】【customDefinition】,requestOptionsWrapper负责替换 IRequestOptions 内部的字符串,customDefinition 负责添加自定义的类型,方便在 替换时能够进行更加轻松的类型定义。 示意图:

image

Manweill commented 2 months ago

这种不是一个好的方法~不够优雅。实际上,IRequestOptions 里面的内容,基本是不作其他作用的,仅仅是在调用方法时的智能提示,然后把参数传递到拦截器。所以还是通过某一个方式把一个自定义的定义传递到 Request 的方法即可。

upload,当前内部是集成了使用 formdata 的形式去上传。如果不满足的话,可以沟通下实际是怎么应用的。

WangMingHua111 commented 2 months ago

upload 仅仅是我的一个举例,目前我有专门的文件上传方法,不会在该库拓展这些参数。【仅仅是在调用方法时的智能提示】,这个对我来说非常重要。的确方式不够优雅,但能够就目前而言能够比较直接了解决这个问题。目前我也没有很好的方式来进行处理。对我而言通过 ts 重新定义axios 的 config对象,也算是一种比较好的方式。 所以我这边需要讨论是否有必要进行 IRequestOptions 的重定义或者修改。 另外 security 参数我打算移除,因为这可变性太大,而且导致不能重写。 image

Manweill commented 2 months ago

添加了马上又移除,这种不是个好处理哈。希望下次可以更加深层次去探讨这个功能点之后再提交 PR。毕竟我有时候不会看得太详细,所以就直接合并了

WangMingHua111 commented 2 months ago

是的,所以先开了这个issue来讨论这个问题。