这个任务比较复杂,我决定自己来做了。希望一个月可以完成,然后发 APIFlask 3.0 版本。
这部分辉哥进度如何了,我未来一段时间比较有空可以帮些忙~(如果快完成了就算了
实际上我还没有开始,只做了一些调研……你要是感兴趣的话,可以交给你
之前大致做了一些调研,应该可以继续用 apispec 来做整体 OpenAPI spec 的生成,marshmallow 或 Pydantic 作为解耦的 serializer 负责对应 schema/model class 的 spec 生成。
有一些项目可以参考:
这个任务比较大,能再拆分细一点吗?我也想参与进来
还挺期待这个功能的
两个人做的话,大致可以分成这两部分:
- 解耦,实现一个通用的 serializer API
- 添加 Pydantic 支持
啊哈,我选第二个
好,那就先这样定了
非常喜欢这个issue,flask 和 pydantic 一直没能很好的融合,一些框架只提供校验,没能提供 openapi 的生成,这也是个能将二者做进一步结合的好机会。
顺便一提:
在之前的工作中,我为公司内部整理了一套基于 flask 的开发范式(因为要结合现有的产品代码,没有走社区版本的范式)。
在模板中我们提供了基于 flask-smorest 的集成(同样是基于 marshmallow),我们在公司做推广时同学提出希望使用 pydantic 作为 de/serializer,但后来无论是时间还是资源,再后来我也离职了,这个事儿也就一直没做成,于私来说十分可惜。
如果可以我也希望参与到这个 feature 的开发中,我最近会抽空看下项目代码。
有兴趣的话,可以试试我这个任务,我一直没有抽出时间来完成
序列化和反序列化的主要代码在这两个方法里面:
这是一些可能有帮助的文档:
https://marshmallow.readthedocs.io/en/stable/
https://flask-marshmallow.readthedocs.io/en/latest/
https://webargs.readthedocs.io/en/latest/
如果有任何问题的话,欢迎交流,我每天晚上基本都会看一眼社区
忙疯了,这两天终于有空看看
webargs支持集成pydantic吗?
看了一下文档似乎只能和marshmallow搭档使用
不支持
我想了解这部份目前的进展到哪步了?有什么阻塞的地方?我对这个 feature 有比较强烈的需求,我可以参与这部份的贡献 :p
几乎没进展,之前写了一些思路,现在彻底没时间,如果需要讨论什么问题我随时都在。
input 的实现,目前看起来核心功能(入参的校验与序列化)更多是使用 这个工具 完成的,我对 webargs.flaskparser
这个工具不是很了解,有什么资料/文档可以让我快速了解它吗?
目前感觉下来更多像是依赖了 webargs 的功能,而不是 marshmallow?
而在 output 上,对 marshmallow 的依赖看起来是 dumps 方法,因此是否可以理解我们抽象一个满足上述需求的接口即可?(基础需求/功能),后续围绕「序列/反序列」来丰富这个接口
1.目前看来最合适的资料还是webargs的文档
但整体而言也不是很详细,还是需要结合API文档和源码看一下
我之前看过,理解难度应该还好
2.是的,参数解析其实主要依赖的是webargs,marshmallow主要是提供了描述校验和处理逻辑的Schema
3.这个设计是合理的。要把序列化/反序列化的逻辑和webargs、marshmallow解耦出来,目前耦合得还是太深了
还有两个点需要注意一下:
①其实没必要太关注webargs的具体实现细节,因为它不支持Pydantic。大概知道它是怎么解析参数和进行错误处理的就可以了。这部分Pydantic应该需要单独结合其他工具实现
②OpenAPI的生成依赖了apispec。这部分也和marshmallow有耦合,参考资料有Marshmallow Plugin
综上,这个功能的工作量还是有点太大了…