Примеры пользовательского интерфейса Swagger с использованием drf-spectacular и x-www-form-urlencoded запросов

Возможно ли создать страницу пользовательского интерфейса swagger (и redoc, если на то пошло), которая содержит примеры как для application/json , так и x-www-form-urlencoded тел запросов? Я могу получить примеры для application/json, но не при выборе x-www-form-urlencoded в качестве типа запроса в пользовательских интерфейсах swagger/redoc.

Я использую следующий декоратор для метода "create" (в ModelViewSet)

@extend_schema(request=MySerializer)

где MySerializer выглядит следующим образом...

@extend_schema_serializer(
    examples=[
        OpenApiExample(
            'Example input',
            description='Creation of an alias',
            value={
                'user_id': 1234567890,
                'obj_id': 288,
                'alias': 'my alias'
            },
            request_only=True,
            response_only=False,
        ),
    ],
)
class MySerializer(serializers.Serializer):
    user_id = serializers.IntegerField()
    obj_id = serializers.IntegerField()
    alias = serializers.CharField(max_length=50)

Пользовательские интерфейсы swagger/redocs с радостью предоставят пример dropbox с "Example Input" для тела запроса application/json (при этом выбор примера заполнит json), но для x-www-form-urlencoded просто покажут форму для заполнения, без примера dropbox для заполнения полей.

Я могу получить примеры (и выпадающие окна их выбора) для строк запроса, т.е. при создании конечных точек GET, использующих OpenApiParameter, например

@extend_schema(
        parameters=[
            OpenApiParameter(name='q', description='Query string to search for', required=True, type=str,
                examples=[
                    OpenApiExample(
                        'Search query',
                        value='foobar'
                    ),
                ]
            ),
            ...
        ]
    )

где выбор элемента выпадающего поля заполняет текстовое поле.

Однако для x-www-form-urlencoded это, похоже, не генерируется?

Возможно ли это? Я делаю что-то не так?

Когда дело доходит до примеров данных, Redoc очень ручной в том смысле, что автоматическая генерация примеров на основе схемы очень ограничена.

AFAIK SwaggerUI действительно генерирует базовый пример на основе схемы, однако только для JSON.

Если вы хотите иметь application/x-www-form-urlencoded примеров, вам, вероятно, придется указывать каждый из них вручную. Не уверен, что сок стоит того, чтобы его выжимать.

Теперь к drf-spectacular: OpenApiExample по умолчанию являются JSON, поэтому если вам нужна другая кодировка, вам нужно явно задать ее, а также предоставить правильно закодированную строку значений:

        OpenApiExample(
            'Form-encoded example 1',
            value='YOUR HANDMADE FROM ENCODED DATA STRING',
            media_type='application/x-www-form-urlencoded'
        )
Вернуться на верх