我有一个使用Django创建的RESTful API的GET端点。 该端点从URL的查询字符串中读取三个值。查询字符串中的特定参数可能会更改数据(包括额外的字段并略微更改结构),该数据会从此端点的JSON响应中返回。
此端点未直接绑定到单个模型。我的视图是RetrieveAPIView
的子类,在视图中,我重写了get_object
方法,并执行了一些逻辑来查询多个模型,做出一些决定并返回有序字典。
我的问题如下:
我想使用Swagger记录此端点。我正在使用drf-yasg
来生成Swagger文档。我没有为此视图声明序列化程序;因为我在get_object
中手动构造了一个有序字典,所以我看不到声明一个字典的目的。我不确定如何使用drf-yasg
记录端点。
我只发现了一种记录端点的方法,但是它很丑陋,使我的代码code肿,我想知道是否有更好的方法。
通过声明一个openapi.Response
对象,并将该对象提供给@swagger_auto_schema
装饰器,Swagger显示了两种可能的响应,但是描述整个响应确实会使我的代码blo肿。以下是当前可用于记录端点的示例:
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框架或drf-yasg库的Django设计模式/功能,以帮助我处理多个响应主体?