【问题标题】:Is it possible to add response examples to non-200 responses是否可以将响应示例添加到非 200 响应
【发布时间】:2022-08-19 00:08:42
【问题描述】:

是否可以为非 200 响应(例如 400)添加 examples:

我注意到对 200 和 400 使用相同的序列化程序会正确生成模式,但不包括 400 响应中的示例。

@extend_schema_serializer(
    component_name=\"CostResponse\",
    examples=[
        OpenApiExample(
            name=\"A Great Example!\",
            value={\"field\": \"Example Value\"}
        )
    ]
)
class CostResponseSerializer(Serializer):
    field = CharField(help_text=\"Thing\")


class CostView(APIView):
    \"\"\"Return the cost of goods sold\"\"\"

    @extend_schema(
        summary=\"Get Cost\",
        responses={
            200: CostResponseSerializer,
            400: CostResponseSerializer,
            406: OpenApiResponse(
                response=CostResponseSerializer,
                examples=[ # custom 
                    OpenApiExample(name=\"Also not included\"),
                ]
            )
        },
    )
    def get(self, request):
        pass

我想为每个端点提供不同的示例,但得到任何东西都会有所帮助。

  /api/what/:
    get:
      operationId: api_what_retrieve
      summary: Get Cost
      responses:
        \'200\':
          content:
            application/json:
              schema:
                $ref: \'#/components/schemas/CostResponse\'
              examples:
                AGreatExample!:
                  value:
                    field: Example Value
                  summary: A Great Example!
        \'400\':
          content:
            application/json:
              schema:
                $ref: \'#/components/schemas/CostResponse\'
        \'406\':
          content:
            application/json:
              schema:
                $ref: \'#/components/schemas/CostResponse\'
  • 我已经放弃并编写了一个帖子挂钩,将示例直接添加到schemas/CostResponse。我找不到将示例添加到代码中的模式或字段的方法。

标签: django drf-spectacular


【解决方案1】:

OpenApiExample 对象包含一个默认设置为 ['200', '201']status_code 属性。

尝试这样的事情:

@extend_schema_serializer(
    component_name="CostResponse",
    examples=[
        OpenApiExample(
            status_codes=['200', '400', '406'],
            name="A Great Example!",
            value={"field": "Example Value"}
        )
    ]
)
class CostResponseSerializer(Serializer):
    field = CharField(help_text="Thing")

这样您就可以为每个状态代码指定示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 2017-04-03
    • 1970-01-01
    • 2015-04-05
    • 2016-05-03
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多