Это нарушает RESTful, когда я пишу вещи на сервер по вызову GET? - PullRequest
0 голосов
/ 23 февраля 2012

Я хотел бы записывать действия пользователя на моем веб-сайте не только для запросов POST, но и для запросов GET. Например, предположим, что пользователь пытается найти город с помощью следующего запроса GET:

/ search_city? Имя = Гринвилл

Этот запрос вернул бы список городов с названием "greenville". Я также хотел бы сохранить это ключевое слово на сервере в качестве «истории поиска» для пользователя. Я планирую просто сохранить эту информацию во время обработки вызова GET.

Это нарушение принципов RESTful? Если да, то как мне сделать это правильно?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Я вижу этот вид ведения журнала аудита как невидимый побочный эффект. Если следующий человек позвонит

/search_city?name=greenville

все еще получает тот же ответ, тогда ваш GET действителен. Похожий случай - построение кэша, вызывающий GET не должен (не обязан) знать, что вы выполняете какую-то дополнительную работу.

Сосредоточьтесь на формальном API - отправьте этот запрос, получите этот ответ.

1 голос
/ 08 ноября 2013

Если в API имеется некоторый ресурс, в котором доступна история поиска пользователей, то это не совсем нормально, поскольку ваш запрос GET имеет видимый побочный эффект.Например, клиентские ответы кэширования не обязаны знать, что любой ресурс изменился, потому что он сделал GET-запрос к чему-либо еще.Я думаю, что единственный способ сделать это и остаться совместимым - это явно пометить побочный ресурс как не кэшируемый.

В частности, установлено, что методы GET и HEAD НЕ ДОЛЖНЫ иметьзначимость принятия действий, кроме поиска.Эти методы следует считать «безопасными».Это позволяет пользовательским агентам представлять другие методы, такие как POST, PUT и DELETE, особым образом, чтобы пользователь знал о том, что запрашивается небезопасное действие.

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

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

Если он сохраняется только для внутреннего использованияЯ думаю, это нормально, но я все же рекомендую против этого.

...