RESTful view counter - PullRequest
       12

RESTful view counter

1 голос
/ 27 января 2010

Я бы хотел посчитать доступ к ресурсу, но HTTP GET не должен изменять ресурс. Счетчик должен отображаться с ресурсом. Аналогичный случай будет хранить последний доступ.

Что такое способ REST для реализации счетчика представлений?

1 Ответ

4 голосов
/ 27 января 2010

Обновление счетчика в ответ на GET на самом деле не является нарушением протокола HTTP. Вы не изменяете ресурс, который получаете, или любой другой ресурс, которым клиент может управлять.
Если серверу не разрешалось делать какие-либо обновления в ответ на GET, тогда файлы журналов нарушали бы HTTP-контракт!

Вот соответствующая часть в RFC2616 ,:

9.1.1 Безопасные методы

Разработчики должны знать, что Программное обеспечение представляет пользователя в их взаимодействия через Интернет, и следует быть осторожным, чтобы позволить пользователю быть в курсе любых действий, которые они могут взять который может иметь неожиданный значение для себя или других.

В частности, конвенция была Установлено, что ПОЛУЧИТЬ и ГОЛОВУ методы не должны иметь Важность принятия действий других чем поиск. Эти методы должны считаться "безопасным". Это позволяет пользователю агенты для представления других методов, такие как POST, PUT и DELETE, в особый способ, так что пользователь сделан осознавая тот факт, что возможно запрашивается небезопасное действие.

Естественно, невозможно убедитесь, что сервер не генерировать побочные эффекты в результате выполнение запроса GET; по факту, некоторые динамические ресурсы считают, что особенность. Важное различие вот что пользователь не запрашивал побочные эффекты, поэтому не может нести ответственность за них.

Первое, на что следует обратить внимание, это то, что в нем говорится «НЕ ДОЛЖНО», а не «НЕ ДОЛЖНО». Есть случаи, когда побочные эффекты действительны.

Вторая критическая строка - это последняя строка, которая подчеркивает тот факт, что пользователь не сделал запрос с каким-либо желанием внести изменения, и поэтому от сервера зависит, чтобы ничего не произошло, что противоречило бы ожиданиям клиентов , В этом суть «единого ограничения интерфейса». Сервер должен делать то, что ожидает клиент. Это сильно отличается от клиента выдающего

GET /myresource?operation=delete

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

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

...