首页 > 解决方案 > 响应正文中的 REST API 过滤器选项

问题描述

我正在尝试根据已设置的过滤器为 REST 端点显示剩余的可能过滤器选项。

是否有某种最佳实践,关于如何设计 REST API,让客户知道剩余的选项?

想到了这样的事情。

{
  "count": 131,
  "next": "2",
  "previous": null,
  "filters": {
    "status": [
      1,
      2,
      99
    ],
    "...": [
      "..."
    ]
  },
  "results": [
    {
      "id": 1,
      "status": 1,
      "...": ".."
    },
    {
      "id": 1,
      "status": 2,
      "...": "...."
    }
  ]
}

标签: restdjango-rest-framework

解决方案


让用户知道哪些过滤器可以添加到端点的最佳方法是使用SwaggerRedoc创建 API 文档。

为了让客户知道他们可以为端点添加哪些过滤器,您可以将文档发送给他们,他们可以在其中准确了解如何使用它。

您是否有另一个特定的用例要在响应中发送它们?

如果您必须在正文中发送过滤器,您可以创建一个FilterMixin并将其放在ViewSets您想要拥有此功能的所有位置并覆盖该list功能。一个例子是这样的:

class FiltersMixin:
    def list(self, request, *args, **kwargs):
        data = super().list(request, *args, **kwargs)
        remaining_filters = list(set(self.filter_fields) - set(self.request.query_params.keys())
        return {"filters": remaining_filters, **data}

ViewSet如果在使用属性上添加了视图集上的过滤器,则此方法有效filter_fields


推荐阅读