gpt4 book ai didi

python - 我什么时候会在 monogoengine 的内置 JSON 序列化(from_json 和 to_json)上使用像 marshmallow 这样的外部序列化器?

转载 作者:行者123 更新时间:2023-12-05 01:16:44 25 4
gpt4 key购买 nike

我正在使用 Flask-RESTful 在 Python 中编写一个简单的 REST API和他们的 documentation says他们计划弃用对象序列化 (reqparse),转而支持像 marshmallow 这样的序列化程序我的 API 正在使用 Flask MongoEngine 从 MongoDB 文档存储读取和写入.

我非常感谢一个用例示例,在该示例中,我会选择使用 Marshmallow 等外部序列化程序,而不是 Document 对象上的 MongoEngine 内置序列化程序。

最佳答案

本质区别在于 marshmallow 进行验证

您不只是从 Internet 获取任何数据并将其填充到您的数据库中。验证可防止输入错误数据(恶意或错误)。即使数据来自受信任的用户,验证它以确保数据库完整性也是个好主意。

Marshmallow 和 flask-restplus 一样,提供的验证器不仅可以验证类型,还可以验证值(数字的最小/最大长度、字符串的最小/最大长度、日期的最小/最大长度等,您甚至可以创建自己的验证器).

此外,API 并不总是全是 CRUD。 API 和 DB 之间可能有一些业务代码,对于这些代码最好有 Python 对象。 Mongo 的 BSON 解析器不会这样做。

MongoEngine 提供验证,但它只是在 DB 之前,而验证应该在进入 API 时进行。


顺便说一句,flask-restful 中的内部 [de|] 序列化已经被预定弃用一段时间了,而且事情似乎停滞不前 ( GH issue #9 )。我认为有人在使用 flask-restplus + marshmallow,所以这可能是一种可行的方法。

这里有一个替代方案:

  • 使用 Marshmallow 进行 I/O [反|]序列化
  • 使用marshmallow-mongoengine从您的 MongoEngine 模式中尽可能自动地创建您的 marshmallow API 模式
  • 使用webargs解析参数(将 flask 请求参数注入(inject)棉花糖模式)
  • 使用apispec按照 OpenAPI 标准记录规范
  • 为了简化操作,请使用 flask-smorest隐藏 webargs/apispec 层并提供一个漂亮的界面。

这个 lib 组合不像整体 flask-restplus 那样成熟和有特色,但是使用 marshmallow 很好,因为它是一个很棒的 lib 并且因为 DRY由 marshmallow-mongoengine 提供。


µMongo 是基于 marshmallow 的 MongoEngine 的替代品,因此它类似于包含 marshmallow-mongoengine 的 MongoEngine。

它的 documentation有一个模式说明验证的不同阶段:客户端和业务对象之间的 API,以及对象和数据库之间的 ODM。


(免责声明:marshmallow、webargs、apispec 和 flask-rest-api 维护者、µmongo、mongoengine 和 flask-mongoengine 贡献者。)

关于python - 我什么时候会在 monogoengine 的内置 JSON 序列化(from_json 和 to_json)上使用像 marshmallow 这样的外部序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52625193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com