Дайте мне пример не RESTful дизайна? - PullRequest
14 голосов
/ 08 октября 2010

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

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

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

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

Ответы [ 4 ]

15 голосов
/ 08 октября 2010

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

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

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

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

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

...

7 голосов
/ 08 октября 2010

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

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

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

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

2 голосов
/ 08 октября 2010

См. Раздел 5.1.5.Ваш пример нарушает единообразное ограничение интерфейса.Это происходит путем нарушения спецификации HTTP.

2 голосов
/ 08 октября 2010

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

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

...