Использование хэша как части идентификатора - PullRequest
1 голос
/ 08 января 2012

Я создаю службу REST как часть моего приложения rails, и мне интересно, плохо ли предоставлять идентификатор с уникальным хешем или временной меткой, добавленной к нему для каждого ресурса. Я хочу, чтобы клиент знал, имеет ли он тот же ресурс, что и сервер, и если нет, то обновляет его.

Пример:

ресурс события будет выглядеть в 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 есть новый хеш, добавленный к идентификатору, что означает, что пользовательский ресурс изменился на сервере, и мы можем перейти к нему.

Таким образом, вопрос в том, лучше ли (более RESTful) отправлять весь пользовательский ресурс (для всех пользователей) вместе с событием или просто отправлять идентификаторы с добавленными хэшами и получать все ресурсы из сервер в отдельном звонке, если они отличаются от локальных?

1 Ответ

5 голосов
/ 08 января 2012

Я бы не стал искажать идентификаторы.

Технически ресурсы идентифицируются по их URL.Так что, если у вас есть другой URL, у вас есть другой ресурс.Кроме того, наличие произвольных идентификаторов делает поиск и использование ваших URL очень сложными.

Вместо этого вам следует использовать ETags .Они обычно используются для кэширования ресурсов.Этаг должен идентифицировать версию ресурса, чтобы клиент использовал заголовок запроса, например, такой:

If-None-Match: "686897696a7c876b7e"

, чтобы получить новейший ресурс, только если версия сервера не соответствует предоставленному ETag.В вашем случае вы можете просто использовать свой хэш-идентификатор в качестве Etag.Таким образом, вы используете стандартные механизмы HTTP и вам не нужно изобретать велосипед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...