4

我有一个使用 Django 创建的 RESTful API 的 GET 端点。此端点从 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 框架或 drf-yasg 库的 Django 设计模式/功能,我可以在这里应用它来帮助我处理多个响应体?

4

0 回答 0