使用哈希作为id的一部分

jon*_*atr 1 rest http

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

Hol*_*ust 5

我不会破坏ID.

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

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

If-None-Match: "686897696a7c876b7e"
Run Code Online (Sandbox Code Playgroud)

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