Как выполнить «менее популярные» действия HTTP в веб-приложении RESTful? - PullRequest
4 голосов
/ 22 января 2009

Я разрабатываю веб-приложение на Python в качестве учебного упражнения и собираюсь сделать свое приложение RESTful.

С этой целью я хочу иметь возможность обрабатывать различные типы HTTP-действий / глаголов, где они применимы. Например, если виджет с идентификатором 12 представлен с помощью URI http://domain/widget/12, и я хочу дать конечному пользователю возможность удалить этот виджет, он должен иметь возможность сделать запрос HTTP DELETE для / widget / 12.

Однако, насколько мне известно, HTML-формы поддерживают только GET и POST, поэтому как мне поступить с HTTP-запросом с помощью «менее популярных» HTTP-действий, таких как DELETE?

Предположим, что на странице просмотра виджета 12 (возвращаемой HTTP GET) я хочу добавить форму с одной кнопкой отправки для удаления этого виджета. Например:

<form action="/widget/12" method="DELETE">
<input type="submit" value="Delete Me!" />
</form>

Однако уже установлено, что формы HTML не поддерживают DELETE для атрибута метода. Итак, что такое RESTful способ выполнить запрос DELETE от клиента в этой ситуации?

Ответы [ 3 ]

7 голосов
/ 22 января 2009

В браузере вам потребуется использовать XmlHttpRequest (Ajax) для сценария, который вы описываете. Если ваш клиент или сервер не поддерживает дополнительные методы, стало обычным использовать пользовательский заголовок X-HTTP-Method-Override, чтобы указать действие.

1 голос
/ 22 января 2009

Сегодня у Стивена Уолтера была отличная запись в блоге на эту тему.

http://stephenwalther.com/blog/archive/2009/01/21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx

В зависимости от того, насколько строго вы хотите придерживаться концепции «RESTful», использование POST для удаления не понравится вам.

1 голос
/ 22 января 2009

Вы либо туннелируете команды через POST, либо используете Ajax, либо и то и другое (посттуннелирование действует как откат, когда не поддерживается javascript)

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