Примеры пользовательского интерфейса 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'
)