如何为具有多种类型的物品设计休止点?

时间:2019-01-06 02:57:42

标签: java rest

我目前有一些通知终点:

  

创建/更新:POST /notifications和参数:SimpleNotif pojo

     

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

     

获取通知:GET /notifications/{id}和参数:id   简单的notif

     

删除Notif:DELETE /notifications/{id},并再次添加params:id

NotifFilter pojo具有sortByoffsetlimit等字段。现在,通知具有两种类型:简单通知和复合通知(又称为摘要)。以上其余端点用于简单通知。

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

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

/notifications/summary

将与

冲突
/notifications/{id}.

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

侧面说明:使用POST列出信息(实际上是GET)的原因是浏览器中的URL长度限制。

1 个答案:

答案 0 :(得分:1)

  

现有端点采用一个过滤对象进行过滤,如果我   在那介绍类型?

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

执行此操作的另一种方法是 引入查询参数 ?type=summary(也因为您正在执行GET名称为f {POST),但是由于您已经具有可查询的终结点,因此应在请求对象中将其与其他参数一起使用。


另一个设计建议是,您可以使用esp在NotificationSummaryNotif中创建一个父对象(例如SimpleNotif)。它们共有的属性,您的基本CRUD仍然可能像这样:

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