Как вы отправляете что-нибудь кроме GET и POST из браузера в ваше приложение RESTful? - PullRequest
6 голосов
/ 22 марта 2009

Я не получаю RESTful вещь. Да, я знаю, как отправить запрос GET в мое приложение из моего браузера. Это через URL-ссылки.

<a href="/user/someone">

А также может отправлять запросы POST через метод формы.

<form method="post">

Кроме того, я знаю, что браузеры иногда отправляют команду HEAD, чтобы выяснить состояние страницы, но над которой конечный пользователь не имеет никакого контроля.

Тогда что это за команды DELETE и PUT, о которых я читаю? Как отправить, например, команду DELETE из браузера в приложение RESTful?

Ответы [ 6 ]

5 голосов
/ 22 марта 2009

Спецификация HTML 4.01 описывает только GET и POST как допустимые значения для атрибута method . Таким образом, в HTML нет способа описать другие методы, кроме этого.

Но спецификация HTML 5 (в настоящее время просто рабочий проект) именует PUT и DELETE как допустимые значения .

Взглянув на спецификацию объекта XMLHttpRequest (в настоящее время только рабочий вариант), используемую для асинхронных запросов в JavaScript (AJAX), поддерживает PUT и DELETE методы тоже, но ничего не говорится о фактической поддержке текущих браузеров.

3 голосов
/ 22 марта 2009

@ C Моран прав: если вы хотите быть действительно RESTful, браузер не является идеальным клиентом, отчасти из-за отсутствия HTTP-методов за пределами GET и POST. Однако, если вы действительно хотите сделать это из браузера, вы можете использовать AJAX для отправки PUT с и DELETE с, например. Диспетчер подключений YUI позволяет указать любой из следующих методов HTTP:

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE
3 голосов
/ 22 марта 2009

Чтобы имитировать PUT и DELETE, фреймворки, такие как Rails, вместо этого создают формы следующим образом:

<form action="/users/1/delete" method="post">
    <input type="hidden" name="_method" value="delete" />
    <input type="submit" value="Delete user 1" />
</form>

На самом деле это форма POST, но с использованием скрытого ввода _method, чтобы сообщить серверу, какой метод действительно был предназначен. Вы также можете реализовать эту поддержку на любом другом веб-фреймворке.

2 голосов
/ 22 марта 2009

POST не должен быть через форму. Лучший способ узнать об этом, а также GET, PUT и DELETE - это использовать клиент ReST для выполнения ваших HTTP-запросов и просмотра ответов. Я рекомендую вам загрузить отличный маленький клиент Python с http://restclient.org/

Браузер (на данный момент) не самый лучший инструмент для использования, когда вы знакомитесь с ReST. Клиент, подобный приведенному выше, позволит вам «видеть» ваши HTTP-запросы и ответы.

2 голосов
/ 22 марта 2009

Я слышал, что DELETE и PUT не полностью поддерживаются во всех браузерах (я не проверял это). Rails делает обходной путь - он отправляет POST со скрытым полем, содержащим реальный метод. Поэтому он действительно использует только GET и POST и на сервере читает это скрытое поле и реагирует на него.

1 голос
/ 22 марта 2009

Приложения на основе Flash (или Flex) могут работать на более низких уровнях, таких как открытые сокеты. Они также могут выполнять PUT / DELETE (хотя, в частности, известно, что Flex имеет проблемы с заголовками http. Так что я полагаю, что это зависит от технологии вашего клиента. В частности, вы можете встроить небольшой флэш-объект, который будет поддерживать связь с вами, если ваш браузер его не поддерживает (или вы не хотите реализовывать кросс-браузерную поддержку).

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