我正在构建一个REST服务作为我的rails应用程序的一部分,我想知道是否使用为每个资源附加的唯一哈希或时间戳来公开ID是不好的。 我想要实现的是客户端将知道它是否具有与服务器相同的资源,如果没有,则更新它。
一个例子:
事件资源在JSON中看起来像这样。
event: {
id: 123-kjkjlhhkh,
name: event-name,
date: somedate,
users: [456-sadasdasdas, 242-asfat4fdhs]
}
客户端会有一个事件表和一个用户表,看起来像这样:
Events id | id-hash | name | date
--------------------------------------------------
123 | kjkjlhhkh | event-name | somedate
Users id | id-hash | username
--------------------------------------------
456 | sadasdasdas | oldusername
242 | kkskksksk | someusername
这意味着我们在客户端看到用户242有一个附加到id的新哈希,这意味着服务器上的用户资源已经更改,我们可以抓住它。
所以问题是,将整个用户资源(对于所有用户)与事件一起发送是更好(更多RESTful),还是只发送带有附加哈希的ID:s并从中获取全部资源服务器在单独的呼叫中,如果它们与本地服务器不同?
答案 0 :(得分:5)
我不会破坏ID。
从技术上讲,资源由其URL标识。因此,如果您有不同的URL,则您拥有不同的资源。此外,附加任意ID使得发现和使用您的URL非常困难。
您应该做的是改为使用ETags。这些通常用于缓存资源。 etag应标识资源版本,以便客户端使用如下所示的请求标头:
If-None-Match: "686897696a7c876b7e"
仅在服务器版本与提供的ETag不匹配时才获取最新资源。在您的情况下,您可以使用您的ID哈希作为Etag。这样,您就可以使用标准HTTP机制,而不必重新发明轮子。