如何使用REST仅返回集合中已更改的资源

时间:2013-05-31 10:32:47

标签: rest api-design

假设我正在设计一个REST API,它应该返回经过身份验证的用户的联系人列表

e.g. /users/me/contacts

为了提高性能,我将返回一个ETag,并在If-None-Match标头中的未来GET请求中提供。假设没有任何改变,那么API将返回Not-Modified响应。

然而,当联系人列表发生变化时会发生什么?我不想再次返回整个集合,只是新的和修改过的项目。

我可以发送HEAD请求,比较ETags,然后发送新项目的后续GET请求,但这似乎有点浪费。

我刚刚遇到了If-Range标题,看起来它可能解决了这个问题,但它似乎还需要以字节为单位指定的Range标头。

你认为If-Range标题是要走的路还是我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:8)

REST是关于资源的。如果/users/me/contacts是资源的URL(联系人列表),则它必须始终返回资源状态的完整表示。

如果您只想检索已更改的联系人,请使用查询参数:

/users/me/contacts?newerThan=20130513124300

newerThan客户端上次访问资源的日期。

这将是RESTful,因为newerThan的每个不同值都会形成不同的URL。

相关问题