Я пытаюсь понять REST. При REST GET не должен запускать что-либо транзакционное на сервере (это определение, с которым все согласны, это фундаментально для REST).
Итак, представьте, что у вас есть веб-сайт как stackoverflow.com (я говорю как , поэтому, если я неправильно понял основную информацию о SO, это ничего не изменит на мой вопрос ), где каждый раз, когда кто-то читает вопрос, используя GET, также появляется экран, показывающий «Этот вопрос прочитан 256 раз» .
Теперь кто-то другой читает этот вопрос. Счетчик теперь равен 257. GET является транзакционным, потому что количество просмотров увеличилось и теперь снова увеличивается. «Количество просмотров» увеличивается в БД, об этом спорить не приходится (например, на SO всегда отображается количество времени, которое любой вопрос был просмотрен).
Итак, действительно ли REST GET несовместим с любым видом "количеством просмотров" подобной функциональностью на веб-сайте?
Так что, если он хочет быть "RESTFUL", должна ли главная страница SO либо перестать отображать простые HTML-ссылки, к которым осуществляется доступ с помощью GET, или перестать отображать "этот вопрос был просмотрен x раз"?
Поскольку увеличение счетчика в БД является транзакционным и, следовательно, "нереальным"?
РЕДАКТИРОВАТЬ только для того, чтобы люди, прибегая к помощи Google, могли получить несколько указателей:
С http://www.xfront.com/REST-Web-Services.html:
4. Все ресурсы, доступные через HTTP GET, не должны иметь побочных эффектов. То есть запрос должен просто возвращать представление ресурса. Вызов ресурса не должен приводить к его модификации.
Теперь для меня, если представление содержит «количество представлений», оно является частью ресурса [а в SO «количество представлений», которое имеет вопрос, является очень важной информацией], и доступ к нему определенно изменяет ресурс.
Это резко контрастирует, скажем, с настоящим RESTFUL HTTP GET, подобным тому, который вы можете сделать на ресурсе Amazon S3, где ваш GET гарантированно не изменит ресурс, который вы получите обратно.
Но тогда я все еще в замешательстве.