首页 > 解决方案 > 如何为具有多种类型的项目设计休息端点?

问题描述

我目前有一些通知端点:

创建/更新:POST /notifications和参数:SimpleNotifpojo

获取通知(列表):POST /notifications/query和参数:NotifFilterpojo

获取 Notif:GET /notifications/{id}和 params:id的简单通知

再次删除 Notif:DELETE /notifications/{id}和 params: id

NotifFilterpojo 有 , 等字段sortByoffset现在通知limit 有两种类型:简单和复合(又名摘要)。上面的休息端点用于简单的通知。

POJOSimpleNotifSummaryNotif共享许多属性。摘要通知将具有所有相同的属性(例如名称、频率等)以及简单通知的列表。摘要通知可以根据某些规则触发,例如一个通知更改或多个更改的严重性等。

如何为摘要通知处理 CRUD 的休息端点设计?

/notifications/summary

会与

/notifications/{id}.

现有的端点采用过滤器对象进行过滤,我应该在那里引入类型吗?我不认为引入一个全新的休息端点是可取的,因为我们已经有了一个用于通知的端点。有什么建议如何处理summarynotif 的CRUD?

旁注:使用 POST 进行列表(实际上是 GET)的原因是浏览器中的 URL 长度限制。

标签: javarest

解决方案


现有的端点采用过滤器对象进行过滤,我应该在那里引入类型吗?

是的,这对您当前的实现是有意义的,因为考虑到SummaryNotif这只是一种通知。所以将来,如果你引入另一种类型,你不能只为它添加另一个端点。

做同样事情的另一种方法是引入一个查询参数 ?type=summary(也因为你正在执行一个GET名为 f的事实POST),但是由于你已经有一个可查询的端点,你应该在你的请求对象中使用一个附加参数来重用它.


另一个设计建议是,您可以使用 esp 创建父级(例如)Notification。它们共有的属性,您的基本 CRUD 仍可能如下所示:SummaryNotifSimpleNotif

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 

推荐阅读