rest - 响应正文中的 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,
"...": "...."
}
]
}
解决方案
让用户知道哪些过滤器可以添加到端点的最佳方法是使用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
。
推荐阅读
- python - 访问最近在 AWS S3 中插入的数据
- javascript - 如何使用反应钩子和可观察的设计模式保持状态更新?
- firebase - 如何从 FirebaseFirestore 在 GoogleMap 上添加自定义标记?
- java - Java代码添加do while循环以使其运行直到用户输入0
- teamcity - TeamCity - 配置 SSH 退出代码失败条件
- r - 无法在 xy 坐标中绘制测试数据
- android - Android - 在输入类型 Number 中添加额外字符
- html - 为什么 React 在添加 onClick 事件处理程序时不会自动使标签可通过选项卡聚焦
- php - 在 WooCommerce 插件的打印发票和交货单中添加自定义订单状态
- php - $this->db->get() with order by not working Codeigniter