Есть ли какой-либо вред в использовании типичного действия GET для PUT? (С удовольствием) - PullRequest
3 голосов
/ 31 января 2010

У меня есть действие, которое не требует формы. Так что на самом деле нужен только один метод edit вместо RESTful edit -> update. Есть ли причина не делать этого или лучше?

def edit
  #Do a POST(PUT)
end

Ответы [ 2 ]

2 голосов
/ 31 января 2010

Gets всегда должен быть idempotent - то есть они не должны выполнять никаких действий, которые изменят состояние приложения, базы данных и т. Д.

Точно так же, как в стороне - в истинной форме RESTful редактирование выполнялось бы действием HTTP Update, но Rails имитирует это с помощью сообщения и скрытого значения в форме, поскольку браузеры не имеют HTTP-обновлений.

Мне до сих пор не понятно, зачем вам обновление без поля ввода. Возможно, немного больше подробностей будет полезно.

2 голосов
/ 31 января 2010

Вред в том, что пользователь может легко перейти по этому URL и выполнить потенциально разрушительное действие.

/noform/edit   #URL typed by user => Action Performed
/noform/update #URL typed by user => Error is thrown, No Action Performed

В обычном режиме просмотра на сервер генерируется GET запросов. Предполагается, что любая страница, на которую можно легко перейти (или ввести в адресную строку), не будет выполнять никаких функций изменения данных.

Запрос POST, сгенерированный посредством отправки формы или запроса AJAX, ожидает результат изменения данных на сервере.

Аналогично, две "рельсовые" версии rails PUT и DELETE также не являются действиями, к которым можно просто перейти с помощью браузера.

Решение

Решение состоит в том, чтобы иметь только действие update, и там, где вы изначально были бы связаны с edit, используйте что-то вроде следующего:

button_to "Add new tracker", noform_path, :method => :put

Если есть какой-либо тип ошибки, вам все равно может понадобиться путь редактирования, чтобы показать пользователю, что он может что-то исправить. Но из того, что вы описали, одно действие update должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...