7

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

e.g. /users/me/contacts

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

但是,当联系人列表发生变化时会发生什么?我不想再次归还整个收藏品,只想归还新的和修改过的物品。

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

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

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

4

1 回答 1

8

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

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

/users/me/contacts?newerThan=20130513124300

newerThan客户最后一次访问资源的日期。

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

于 2013-05-31T10:45:09.860 回答