如何最好地表示REST中的资源聚合

时间:2014-04-02 16:50:54

标签: web-services http rest

假设我有一个由URI / rest / persons表示的Person资源的集合。每个人资源都有一组Thing资源,而URI基本上是/ rest / persons / {id} / things。现在,假设客户希望查看所有Thing资源,而无需通过每个人ID。应该使用什么URI?以下是一个好的设计:

/休息/人/事

或者他们应该通过人物集合上的查询参数进行某种过滤吗?

/休息/人?东西=所有

另一种选择是将人和事物分成两个单独的URI(因此没有明显的父 - >子关系)

有没有更好的方法,或者是否应该劝阻。请记住,目标是限制客户端想要获取所有Thing资源的汇总而不管拥有者是谁的请求数量。

1 个答案:

答案 0 :(得分:0)

我会这样建模:

GET /rest/persons/{id}
GET /rest/persons/{id}?expand=things

GET /rest/things
GET /rest/things?person={id}

如果使用?expand=things,则返回人员资源中嵌入的所有内容。如果不是,您可以只返回其URI(首选)或不返回值。

我会避免使用/rest/persons/things,因为我不喜欢将一系列事物作为一个人的同伴的想法。它对我来说没有意义。

你绝对应该避免使用/rest/persons?things=all,因为你的请求URI说的是#34;给我所有的人提供他们所有的东西",但你的回答只是一堆东西。