2010-10-08 3 views
13

Я узнал термин «RESTful» как разработчик Rails. После прочтения википедии также here и here.Дайте мне пример не-RESTful дизайна?

Я не понимаю. Мне кажется, Rails использует только способ описания URL-адресов. Мне кажется, что каждый URI является RESTful, в его разработанном сфера.

Например, я думаю, GET /delete?student_id=3 RESTful в области применения самого приложения.

Может ли кто-нибудь сказать мне, какое ограничение это нарушает? Пожалуйста, обратитесь к сужению из REST definition.

ответ

15

A GET запрос должен быть idempotent, и запрос не должен оставлять никаких побочных эффектов на сервере. Цитируя HTTP spec sec 9.1.1:

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

GET /delete?student_id=3 Поэтому уже нарушает Идемпотентность предположение о GET глагола, так как он будет удалить запись на сервере.

Интерфейс RESTful представляет собой единый интерфейс, который означает, что предполагается, что GET будет вести себя в соответствии с требованиями спецификации HTTP. И это то, что the spec says:

Метод GET позволяет получать любую информацию (в форме лиц) идентифицируются Request-URI. Если Request-URI ссылается на на процесс создания данных, то это полученные данные должны быть , возвращенные как объект в ответе, а не исходный текст процесса , если только этот текст не является результатом работы обработать.

...

+2

Это нарушает спецификацию HTTP. Не спецификация REST. – Cheng

+0

@Cheng: Да, это не должно нарушать спецификацию HTTP. Это не унифицированный интерфейс, если он не соответствует какой-либо спецификации. –

+0

@ Daniel Vassallo +1, хотя это, вероятно, следует перефразировать как «Запрос GET должен быть идемпотентом/и/запрос не должен оставлять побочные эффекты [...]». PUT тоже идемпотент, но имеет побочные эффекты. – Bruno

1

GET должна быть безопасной, чтобы быть RESTful, но, очевидно, в сочетании с удалить это небезопасно.

Таким образом, он выглядит RESTful, но не действует RESTful. Таким образом, он не работает duck test.

7

Мне кажется, Rails использует только способ описания URL-адресов. Кажется, для меня каждый URI RESTful, в его дизайн области.

URI не являются ни RESTful, ни RESTful. REST - это архитектурный стиль, для которого вам необходимо рассмотреть общее приложение.

GET - метод запроса на поиск. Если вы хотите поставить это в контексте диссертации REST, если ваш запрос GET имеет побочные эффекты, он затем сломает еще несколько ограничений, например, в отношении кеша.

Возможно, вы также можете создать систему RESTful, в которой запрос GET /delete?student_id=3 дает вам представление о том, что вы хотите удалить этого студента (или попросите подтвердить), если он фактически не выполняет операцию удаления.

2

См. Раздел 5.1.5. Ваш пример нарушает унифицированное ограничение интерфейса. Он делает это, нарушая спецификацию HTTP.

Смежные вопросы