Как вы отправляете что-либо кроме GET и POST из браузера в ваше приложение RESTful?

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

<a href="/user/someone">

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

<form method="post">

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

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


person CDR    schedule 22.03.2009    source источник


Ответы (7)


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

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

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

person Gumbo    schedule 22.03.2009
comment
в прошлый раз я пытался mail-archive.com/public-webapi@ w3.org/msg00336.html недостаточно поддержки для создания клиентов ajax web-dav. Но я изменил спецификацию, поэтому агенты должны поддерживать общие безопасные методы. - person Pete Kirkham; 22.03.2009
comment
Спецификация HTML 5 сильно изменилась за последние 11 лет, PUT и DELETE больше не являются допустимыми значениями. - person lars k.; 09.12.2020

Для имитации 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, чтобы сообщить серверу, какой метод действительно предназначался. Вы также можете реализовать эту поддержку в любой другой веб-инфраструктуре.

person Ron DeVera    schedule 22.03.2009

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

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE
person Hank Gay    schedule 22.03.2009

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

person klew    schedule 22.03.2009

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

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

person chefsmart    schedule 22.03.2009

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

person Assaf Lavie    schedule 22.03.2009

DELETE и PUT — это глаголы HTTP, скажем, команды REST, которые удаляют или обновляют объект на сервере.

Использовать их в браузере можно по-разному. Вы не можете отправить их через HTML, но вы можете отправить запрос JavaScript Ajax, если хотите использовать их программно.

Если вы хотите только изучить API или протестировать некоторые вызовы и хотите сделать это из браузера, вы можете использовать подключаемые модули для браузера, такие как RESTED для Firefox.

Для ручного и автоматического тестирования вы можете использовать Postman как полнофункциональную тестовую среду API.

В Windows можно использовать сценарий PowerShell https://docs.microsoft.com/en-us/aspnet/core/web-api/http-repl/ для отправки различных вариантов использования HTTP RESTful API.

person lars k.    schedule 09.12.2020
comment
(не ответ на вопрос...) - person Julian Reschke; 09.12.2020