То, о чем вы, по сути, спрашиваете, называется перегрузкой метода - хотя это не 100% RESTful, это подход, к которому вы можете прибегнуть в случае, если клиент не поддерживает методы PUT / DELETE.В книге Ричардсона / Руби Веб-службы RESTful также упоминается этот метод.
Вы сами сформулировали основной принцип в своем вопросе - разница по сравнению с полностью подходом RESTful заключается в том, что вы вводите новыйпараметр, который передается как часть тела запроса через POST.Этот параметр указывает предполагаемый метод (например, POST / PUT / DELETE), который отправляется через (перегруженный) запрос POST.Это позволяет вам преодолеть ограничение HTTP-метода клиента, сохраняя при этом ваш URI-дизайн чистым и RESTful (например, без глаголов).Однако вы все равно должны стремиться быть как можно более RESTful, то есть продолжать использовать GET для запросов только для чтения (таким образом, не влияя на кеширование и т. Д.) И использовать перегруженную запись для любых запросов на запись.Что касается того, как назвать параметр, который содержит истинный метод HTTP - я сам не знаю ни одной стандартизированной политики именования, поэтому следует использовать то, что используется в Prototype.js (или с любым именем, которое хорошо вписывается в вашу политику именования)отлично.
Что касается jQuery и XmlHttpRequest в целом, они должны поддерживать методы PUT и DELETE.См .:
Обратите внимание, что документация jQuery предупреждает о поддержке PUT / DELETE, зависящей от браузера.Насколько я понимаю, эти методы должны поддерживаться при использовании XHR ... однако вам следует скорее проверить, поддерживают ли все ваши целевые браузеры эти методы, прежде чем принимать решение между перегрузкой POST и полным стеком HTTP-методов.
jQuery по умолчанию обеспечивает доступ к методам .get()
и .post()
, которые оба построены поверх .ajax()
.Для выполнения вызовов PUT / DELETE через jQuery вам нужно напрямую использовать метод .ajax()
и указать его в настройках type
.Это, однако, делает истинный запрос PUT / DELETE, так как сам jQuery не предоставляет никаких автоматических средств для обработки перегрузки методов (поэтому вам нужно кодировать его самостоятельно, чтобы он вписывался в ваш дизайн API).
Если выЯ не буду использовать XHR и должен полагаться на стандартные формы, поэтому я боюсь, что вам придется использовать перегрузку методов, поскольку поддержка методов PUT / DELETE в качестве допустимых значений действия формы была исключена из спецификации HTML5 (это также было отмечено в вопросе SO, на который вы ссылаетесь).