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