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