4

我有一个 Flask Rest Api,它使用棉花糖进行序列化-去现实化。Api 收到一批项目。

我想对每个项目的输入架构执行严格验证,而不是对整个请求进行验证。 这样做的目的是允许我进行细粒度的错误处理,即处理整个批处理请求并返回错误项目的验证错误。

示例时间!

假设这是我的主要 Rest Json 请求模式(注意Nested字段列表) -

from marshmallow import Schema

class MyRequestSchema(Schema):
    class Meta:
        strict = True
    items = fields.List(fields.Nested(MyItemSchema), required=True)
    id = fields.String(required=False, missing=None)
    meta_field = fields.Integer(required=False, missing=False)

这是我的Nested field架构-

class MyItemSchema(Schema):
    class Meta:
        strict = True
    name = fields.String(required=False, missing=None)
    flag = fields.Bool(required=False, missing=False)

我想要棉花糖 1) 反序列化整个请求模式和 2) 为我提供每项模式验证错误或序列化对象。使用这种行为,我将处理每个Item. 对于每个包含验证错误的项目,我将返回一个错误对象,对于有效的项目,我将返回一个正确的响应项目。

所以对于这样的请求 -

{
  "id": "d6f6f80c558a11",
  "meta_field": 42,
  "items": [
    {
      "name": "abc",
      "flag": true
    },
    {
      "bad_field": "bad_value"
    }
  ]
}

我想按照以下方式回复 -

{
  "id": "d6f6f80c558a11",
  "result_items": [
    {
      "name": "abc",
      "result": "Great Success!"
    },
    {
      "schema_validation_error": {
        "details": {
          "listings": {
            "0": {
              "name": [
                "Missing data for required field."
              ],
              "flag": [
                "Missing data for required field."
              ]
            }
          }
        },
        "message": "Invalid Item"
      }
    }
  ]
}

棉花糖是否支持这种行为?

关于实施这个有什么建议吗?

理想情况下,我想要一个包含尽可能多的 Flask+Marshmallow 的答案(而不是自己实现逻辑)

谢谢!

4

0 回答 0