マシュマロをシリアル化と非シリアル化に使用する 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 をできるだけ多く取り入れた答えが欲しいです。
ありがとう!