Дайте мне пример не-RESTful дизайна?

Я узнал термин RESTful как разработчик Rails. После чтения wikipedia также здесь и здесь.

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

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

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

Ответ 1

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

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

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

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

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

...

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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