Документирование конечной точки DRF GET с несколькими ответами с использованием Swagger
У меня есть конечная точка GET для RESTful API, который я создаю с использованием Django. Эта конечная точка считывает три значения из строки запроса URL. Определенный параметр в строке запроса может изменить данные (включить дополнительные поля и слегка изменить структуру), которые возвращаются в ответе JSON от этой конечной точки.
Эта конечная точка не связана напрямую с одной моделью. Мой вид подклассов RetrieveAPIView
по мнению, я отменяю get_object
Метод и некоторая логика выполняются для запроса нескольких моделей, принятия некоторых решений и возврата упорядоченного словаря.
Моя проблема заключается в следующем:
Я хотел бы задокументировать эту конечную точку с помощью Swagger. я использую drf-yasg
генерировать мою документацию Swagger. У меня нет сериализаторов, заявленных для этого представления; так как я вручную создаю упорядоченный словарь в get_object
Я не вижу цели объявления этого. Я не уверен, как документировать мою конечную точку, используя drf-yasg
,
Я обнаружил только один подход к документированию конечной точки, но он довольно уродлив и раздувает мой код, и мне интересно, есть ли лучший подход.
Объявив openapi.Response
объект, и поставляя этот объект @swagger_auto_schema
Декоратор Swagger отображает два возможных ответа, но описание всего ответа действительно раздувает мой код. Вот пример того, что в данный момент работает для документирования конечной точки:
class View(RetrieveAPIView):
http_method_names = ['get']
response_json = {
'Response if X query parameter is something': {
'key1': 'string',
'key3': {
'key4': 0,
'key5': 'string',
'key6': 'string'
}
},
'Response if X query parameter is something else': {
'key1': 'string',
'key2': 'string'
}
}
swagger_get_responses = openapi.Response(description='Description for the set of responses',
examples=response_json)
@swagger_auto_schema(responses={200: swagger_get_responses})
def get(self, request, *args, **kwargs):
return super().get(request, args, kwargs)
def get_object(self):
// Execute a method on a model that queries other models, performs some logic, and
// then returns an ordered dict which is then returned by this function.
Есть ли лучший подход к этой проблеме? Есть ли лучший шаблон / функция дизайна Django инфраструктуры Django или библиотеки drf-yasg, которую я могу применить здесь, которая поможет мне обрабатывать несколько тел ответов?