«Пометить как прочитанное» в приложении RESTful - PullRequest
2 голосов
/ 11 февраля 2011

Я пишу сайт, на котором я хочу пометить страницы как прочитанные, как только они были, но не могу найти самый РЕСТОРНЫЙ способ сделать это.

Очевидно, чтобы получить страницу, которую клиент отправитЗапрос GET, но если я тогда пойду и отмечу страницу как прочитанную, это нарушает правило, что GET должен быть идемпотентным - теперь что-то меняется на сервере.

Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 29 ноября 2012

Является ли состояние чтения неотъемлемой частью ресурса или это просто средство отслеживания на стороне сервера?Хотели бы читатели получить списки всех документов, которые «прочитаны» или «непрочитаны»?Смогут ли пользователи пометить документ как «непрочитанный», если они загрузят его, но решат прочитать его позже?

Если это только на стороне сервера, тогда можно пометить кортеж {user,resource} как прочитанный на каждомПОЛУЧИТЬ запрос.Если статус чтения для каждого пользователя является частью ресурса, вам нужно сопоставляемое клиентом сопоставление «многие ко многим» между пользователями и ресурсами, и либо пара отображается (читается), либо нет (не читается).В этом случае я предлагаю использовать новый ресурс для представления этого статуса и разрешить клиенту помещать логическое значение true / false в этот URI ресурса.Будь то user@host/resource/read или /user/{user}/resource/read или какой-либо другой, это не имеет значения.

Если вы хотите, чтобы этот флаг устанавливался автоматически, а ваш клиент был веб-браузером, вам нужно будет использовать AJAXвыполнить второй запрос после загрузки документа (и, возможно, вкладка была видна в течение определенного истекшего периода).

...