java - 如何为具有多种类型的项目设计休息端点?
问题描述
我目前有一些通知端点:
创建/更新:
POST /notifications
和参数:SimpleNotif
pojo获取通知(列表):
POST /notifications/query
和参数:NotifFilter
pojo获取 Notif:
GET /notifications/{id}
和 params:id
的简单通知再次删除 Notif:
DELETE /notifications/{id}
和 params: id
NotifFilter
pojo 有 , 等字段sortBy
。offset
现在通知limit
有两种类型:简单和复合(又名摘要)。上面的休息端点用于简单的通知。
POJOSimpleNotif
也SummaryNotif
共享许多属性。摘要通知将具有所有相同的属性(例如名称、频率等)以及简单通知的列表。摘要通知可以根据某些规则触发,例如一个通知更改或多个更改的严重性等。
如何为摘要通知处理 CRUD 的休息端点设计?
/notifications/summary
会与
/notifications/{id}.
现有的端点采用过滤器对象进行过滤,我应该在那里引入类型吗?我不认为引入一个全新的休息端点是可取的,因为我们已经有了一个用于通知的端点。有什么建议如何处理summarynotif 的CRUD?
旁注:使用 POST 进行列表(实际上是 GET)的原因是浏览器中的 URL 长度限制。
解决方案
现有的端点采用过滤器对象进行过滤,我应该在那里引入类型吗?
是的,这对您当前的实现是有意义的,因为考虑到SummaryNotif
这只是一种通知。所以将来,如果你引入另一种类型,你不能只为它添加另一个端点。
做同样事情的另一种方法是引入一个查询参数 ?type=summary
(也因为你正在执行一个GET
名为 f的事实POST
),但是由于你已经有一个可查询的端点,你应该在你的请求对象中使用一个附加参数来重用它.
另一个设计建议是,您可以使用 esp 创建父级(例如)Notification
。它们共有的属性,您的基本 CRUD 仍可能如下所示:SummaryNotif
SimpleNotif
Create/Update: POST /notifications and params: Accept a Notification object (subtyping helps here)
Get Notifs (listing): POST /notifications/query and params: updated NotifFilter pojo
Get Notif: GET /notifications/{id} and params: id
Delete Notif: DELETE /notifications/{id} and params: id
推荐阅读
- python - 使用 pandas 将列附加到列
- c# - 控制请求对象解构的选项
- swift - 具有类绑定约束的泛型类不能通过类绑定协议参数化
- python - 如何创建逻辑来在熊猫中进行值映射?
- python - 为什么我的熊猫数据框使用这么多内存?
- elixir - 在 Elixir 中,将测试文件与相关模块放在一起
- c# - Angular:无法通过 HttpResponse 返回自定义错误消息
- c# - 在分支之间转换时生成错误:您的项目未引用“.NETFramework,Version=v4.7.2”框架
- python - 抓取linkedin新闻提要
- docker - Docker 容器以代码 0 退出