我正在尝试基于已设置的过滤器显示REST端点的其余可能的过滤器选项。
关于如何设计REST API的某种最佳实践,可以让客户端知道其余选项吗?
想到这种事情。
{
"count": 131,
"next": "2",
"previous": null,
"filters": {
"status": [
1,
2,
99
],
"...": [
"..."
]
},
"results": [
{
"id": 1,
"status": 1,
"...": ".."
},
{
"id": 1,
"status": 2,
"...": "...."
}
]
}
让用户知道可以将哪些过滤器添加到端点的最佳方法是使用Swagger或Redoc创建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
上,则可以使用。