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

标签 rest api-design

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

e.g. /users/me/contacts

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

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

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

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

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

最佳答案

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

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

/users/me/contacts?newerThan=20130513124300

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

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

关于rest - 如何使用 REST 仅返回集合中已更改的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855269/

相关文章:

java - Hibernate实体虚拟列错误?

java - 如何使用 REST 和 JPA/Hibernate 正确更新实体

java - 设计 RESTful 登录服务

xml - 开源/免费的通用 EPG/XMLTV 数据 API 或服务,或者如何制作?

ios - viewDidLoad 方法命名是否具有误导性?

java - @Email 验证注释导致部署中出现 NullPointerException

java - 客户端休息 SSL java : javax.net.ssl.SSLHandshakeException

python - 如何迭代列表列表,同时将列表中的每个值传递到 API 并在每个列表列表之后暂停?

没有正文的 RESTful API POST 调用请求

c# - 包含枚举描述的发布请求