使用哈希作为id的一部分

时间:2012-01-07 22:45:47

标签: http rest

我正在构建一个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并从中获取全部资源服务器在单独的呼叫中,如果它们与本地服务器不同?

1 个答案:

答案 0 :(得分:5)

我不会破坏ID。

从技术上讲,资源由其URL标识。因此,如果您有不同的URL,则您拥有不同的资源。此外,附加任意ID使得发现和使用您的URL非常困难。

您应该做的是改为使用ETags。这些通常用于缓存资源。 etag应标识资源版本,以便客户端使用如下所示的请求标头:

If-None-Match: "686897696a7c876b7e"

仅在服务器版本与提供的ETag不匹配时才获取最新资源。在您的情况下,您可以使用您的ID哈希作为Etag。这样,您就可以使用标准HTTP机制,而不必重新发明轮子。