Улучшения в браузере
"Есть два не вызывающих споров варианта использования перегруженного POST. Первое - это имитация унифицированного интерфейса HTTP для клиентов, таких как веб-браузеры, которые не поддерживают PUT или DELETE".
RESTful Web Services, Leonard Richardson & Sam Ruby.
Для того чтобы Web-интерфейс API функционировал, есть несколько усовершенствований для браузеров, которые должны быть предоставлены REST-фреймворком.
Начиная с версии 3.3.0 и далее они включаются с помощью javascript, используя библиотеку ajax-form.
PUT, DELETE и т.д. на основе браузера.
Библиотека AJAX form library поддерживает браузерные методы PUT
, DELETE
и другие методы на HTML формах.
После включения библиотеки используйте атрибут data-method
на форме, как показано ниже:
Обратите внимание, что до версии 3.3.0 эта поддержка осуществлялась на стороне сервера, а не на основе javascript. Стиль перегрузки методов (используемый в Ruby on Rails) больше не поддерживается из-за некоторых проблем, возникающих при разборе запросов.
Отправка контента вне формы с помощью браузера
Отправка через браузер таких типов содержимого, как JSON, поддерживается библиотекой форм AJAX, используя поля формы с атрибутами data-override='content-type'
и data-override='content'
.
Например:
Обратите внимание, что до версии 3.3.0 эта поддержка осуществлялась на стороне сервера, а не на основе javascript.
Суффиксы формата на основе URL
DRF может принимать параметры URL в стиле ?format=json
, что может быть полезным сокращением для определения типа содержимого, которое должно быть возвращено из представления.
Это поведение контролируется с помощью параметра URL_FORMAT_OVERRIDE
.
Переопределение метода на основе заголовка HTTP
До версии 3.3.0 поддерживался заголовок расширения X-HTTP-Method-Override
для переопределения метода запроса. Это поведение больше не используется в ядре, но может быть добавлено при необходимости с помощью middleware.
Например:
URL based accept headers
Заголовки accept на основе URL
До версии 3.3.0 DRF включал встроенную поддержку параметров URL в стиле ?accept=application/json
, что позволяло переопределять заголовок Accept
.
После внедрения API согласования контента это поведение больше не включено в ядро, но может быть добавлено с помощью пользовательского класса согласования контента, если это необходимо.
Например:
Разве HTML5 не поддерживает формы PUT и DELETE?
Нет. Одно время предполагалось, что HTML5 будет поддерживать формы PUT
и DELETE
, но позже это было исключено из спецификации. Остается продолжающееся обсуждение добавления поддержки PUT
и DELETE
, а также того, как поддерживать типы содержимого, отличные от закодированных в форме данных.
Last updated