RESTful系列&控制会员详情

时间:2011-04-05 23:15:56

标签: http rest data-structures collections

我现在已经多次遇到过这个问题,而且每次我都做一个没有结果的搜索来得出令人满意的答案。

我们有一个集合资源,它返回成员URI的表示,以及具有相同URI(和自定义关系类型)的Link头字段。我们经常发现我们需要集合中每个成员的特定数据。

  • 在一个极端,我们可以让集合只返回成员URI;然后,客户端必须依次查询每个URI,以确定每个成员所需的数据。

  • 在另一个极端,我们会返回我们可能想要的所有细节。这些都不是完美的;第一个可以导致大量的API调用,第二个可能会返回许多可能不需要的信息。

在我们的案例中,我赞成第二个极端,因为我们很少使用它来进行一次以上的诉讼。但是,对于更通用的方法,我想知道是否有人有一种很好的方法来动态指定应该为集合的每个成员包含哪些细节?我想查询字符串参数是最合适的,但我不想打破资源的自描述性。

3 个答案:

答案 0 :(得分:3)

我更喜欢你的第一个选择..

  

在一个极端,我们可以拥有   收集只返回   成员URI;然后客户必须   依次查询每个URI以确定   每个成员所需的数据。

如果您想通过线路减少HTTP呼叫的数量,例如从手机应用程序(iOS / Android)调用服务。您可以添加其他标头以包含子资源:

X-Aggregate-Resources-Depth: 2

您的服务器端代码必须将资源聚合到所需的深度。

答案 1 :(得分:1)

听起来你正试图重新发明PROPFIND(RFC 4918, Section 9.1)。

答案 2 :(得分:0)

我经常在集合资源中的每个项目中包含元素的子集。如何定义不同的子集取决于您自己。不管你这样做,

/mycollectionwithjustlinks
/mycollectionwithsubsetA 
/mycollectionwithsubsetB

或您使用查询字符串

/mycollection?itemfields=foo,bar,baz

无论哪种方式,他们都是不同的资源。我不确定你为什么认为这会影响自描述性约束。