Http delete запрос php

HTTP-протокол PUT и DELETE и их использование в PHP

Говорят, PUT и DELETE . Я только слышал о POST и GET и никогда не видел что-то вроде $_PUT или $_DELETE проходящих в любом PHP-коде, который я когда-либо просматривал.

Мой вопрос

Каковы эти методы (PUT) и (DELETE), и если можно использовать их в PHP, как бы я это делал.

Примечание. Я знаю, что это не проблема, но я всегда получаю возможность обучения, если увижу ее, и очень хотел бы научиться использовать эти методы на PHP, если это возможно.

Каковы эти методы (PUT) и (DELETE) для …

Есть много слов, которые нужно потратить, чтобы объяснить это, и я недостаточно квалифицирован, чтобы сделать это, но, как уже было опубликовано, краткое описание того, что описывает спецификация HTTP .

Протокол в основном говорит об этом:

  • используйте GET, когда вам нужно получить доступ к ресурсу и получить данные , и вам не нужно изменять или изменять состояние этих данных.
  • используйте POST, когда вам нужно отправить некоторые данные на сервер. Ex. из формы, чтобы сохранить эти данные где-то.
  • используйте HEAD, когда вам нужно получить доступ к ресурсу и получить только заголовки из ответа , без каких-либо данных ресурсов.
  • используйте PUT, когда вам нужно заменить состояние некоторых данных, уже существующих в этой системе.
  • используйте DELETE, когда вам нужно удалить ресурс (относительно вашего URI, который вы отправили) в этой системе.
  • используйте OPTIONS, когда вам нужно получить параметры связи с ресурсом, поэтому для проверки разрешенных методов для этого ресурса . Ex. мы используем его для правил запроса и разрешений CORS.
  • Вы можете прочитать о двух оставшихся методах этого документа, извините, что я никогда не использовал его.

В основном протокол – это набор правил, которые вы должны использовать из своего приложения, чтобы придерживаться его.

… и если можно использовать их в PHP, как бы я это сделал.

Из вашего приложения вы должны получить, какой метод использовался с $_SERVER[‘REQUEST_METHOD’] и реагировать соответственно.

Некоторые приложения, работающие с браузерами, которые не поддерживают методы PUT или DELETE, используют этот трюк, скрытое поле из html, со значением, например:

Таким образом, из приложения вы теперь можете распознать это как запрос DELETE.

Следуйте простому описанию того, как PHP обрабатывает параметры:

Когда вы (ваш браузер, ваш клиент) запрашиваете ресурс на HTTP-сервере, вы должны использовать один из методов, который принимает протокол (HTTP). Поэтому вам нужно пройти:

  • МЕТОД
  • Ури ресурса
  • Заголовки запроса, такие как User-Agent, Host, Content-Length и т. Д.
  • (Необязательный орган запроса)
Читайте также:  Sample Application

поэтому запрос должен выглядеть так:

GET /something/index.php?maybe=aparameter 

Теперь, внутри вашего приложения, PHP принимает параметры из этого запроса GET и вставляет их в массив суперглобального (доступного для всего вашего приложения). Таким образом, вы можете получить доступ к $_GET[‘maybe’] который возвращает «aparameter».

В случае запроса POST вы запрашиваете ресурс на HTTP-сервере аналогичным образом, но с важным отличием. Вы предоставляете данные внутри тела запроса:

POST /something/index.php (body) maybe=aparameter 

Теперь, внутри вашего приложения, PHP из этого запроса POST принимает параметры и вставляет их в массив суперглобального (доступного всего вашего приложения). Таким образом, вы можете получить доступ к $_POST[‘maybe’] который возвращает «aparameter».

Также обратите внимание на код состояния ответа (например, если вы получили запрос PUT, и вы обновили этот ресурс без ошибок, вы должны вернуть статус 204 – нет содержимого) .

Способ использования данных PUT из PHP:

$method = $_SERVER['REQUEST_METHOD']; if ('PUT' === $method) < parse_str(file_get_contents('php://input'), $_PUT); var_dump($_PUT); //$_PUT contains put fields > 

В спецификации HTTP описаны .

В двух словах, и несколько упрощая, PUT предназначен для загрузки файла в URL-адрес, а DELETE – для удаления файла из URL-адреса.

никогда не видел что-то вроде $_PUT или $_DELETE проходящих в любом PHP-коде, который я когда-либо просматривал

$_POST и $_GET ужасно названы суперглобалами. $_POST – это данные, обработанные из тела запроса. $_GET предназначен для анализа данных из URL. Нет ничего, что строго связывает данные в любом из этих мест (особенно URL) с конкретным методом запроса.

Запросы DELETE заботятся только о пути URL-адреса, поэтому нет данных для синтаксического анализа.

Запросы PUT обычно касаются всего тела запроса (а не его синтаксического анализа), к которому вы будете обращаться с file_get_contents(‘php://input’); ,

и если можно использовать их в PHP, как бы я это сделал.

Вам нужно будет сопоставить URL-адрес с PHP-скриптом (например, с перезаписи URL-адресов ), протестировать метод запроса , определить, на каком URL вы фактически имеете дело , а затем написать код для выполнения соответствующих действий.

Наиболее подходящим местом для использования этих методов (PUT и DELETE) является REST API. Если мы используем методы http для определения режима работы, например, вы хотите получить любые ресурсы, то вы можете использовать следующее:

GET http://api.example.com/employee/

для добавления нового элемента:

POST http://api.example.com/employee/ 

для обновления или редактирования:

PUT http://api.example.com/employee/ 

для удаления существующего ресурса:

DELETE http://api.example.com/employee/1 

Теперь на стороне PHP вам просто нужно прочитать, какой метод HTTP используется, чтобы вы могли совершить действие в соответствии с этим.

есть много доступных библиотек, которые могут сделать это для вас. это очень хороший пример: http://phphttpclient.com/

Читайте также:  Python get pid windows

PHP $_GET и $_POST плохо названы. $_GET используется для доступа к значениям параметров строки запроса, а $_POST позволяет получить доступ к телу запроса.

Использование параметров строки запроса не ограничено запросами GET, а другие запросы, кроме POST, могут иметь тело запроса.

Если вы хотите узнать глагол, используемый для запроса страницы, используйте $_SERVER[‘REQUEST_METHOD’] .

Источник

RESTful PHP — 5 простых советов

REST (Representational state transfer) — это архитектурный стиль или свод соглашений для web-приложений и сервисов, основанный на манипулировании ресурсами и спецификацией HTTP. Впервые об этом заговорил Рой Филдинг (Roy Fielding) — один из отцов основателей HTTP (Hypertext Transfer Protocol).

Web-приложения зачастую игнорируют спецификацию HTTP и двигаются вперёд используя полюбившиеся возможности: GET и POST, 200 OK и 404 NOT FOUND. Так как используются программируемые web-приложения, со своими собственными API, то решение игнорировать спецификацию HTTP, может создать проблемы в дальнейшем. Как следствие — имеем множество приложений с интерфейсами GET и POST. Например интерфейс удаления пользователя: GET /user/1/delete против POST /user/delete ; в случае REST можно указать /user/1 это ресурс, а удаление HTTP метод DELETE.

Такие важные методы HTTP, как — POST, GET, PUT и DELETE — зачастую сравнивают с CREATE, READ, UPDATE, DELETE (CRUD) операциями маниулирования базами данных. HTTP отделяет понятие web-сервер и web-браузер. Это позволяет каждой реализации отличаться от других подобных, основанных на «клиент/сервер» принципе.

Теперь самое время взглянуть на примеры, так будет понятнее.

1. Использование методов PUT и DELETE

В PHP можно без проблем определить используемый HTTP метод, достаточно обратиться к переменной системного массива $_SERVER[‘REQUEST_METHOD’]; В случае web-браузеров там прописан либо GET, либо POST метод. Для клиентских приложений REST требуется поддержка PUT, DELETE и желательно OPTIONS и прочих. Но к сожалению в PHP нет $_PUT и $_DELETE, в отличии от $_GET и $_POST. Вот способ исправить упущение:

$_PUT = array(); if($_SERVER['REQUEST_METHOD'] == 'PUT') < $putdata = file_get_contents('php://input'); $exploded = explode('&', $putdata); foreach($exploded as $pair) < $item = explode('=', $pair); if(count($item) == 2) < $_PUT[urldecode($item[0])] = urldecode($item[1]); >> > 

Таким образом у нас появляется массив $_PUT, похожий на $_POST за исключением суперглобальности.

2. Отправка выборочных HTTP 1.1 заголовков

PHP позволяет кастомизировать заголовки посылаемые клиенту. В свою очередь заголовок содержит код ответа от сервера. По умолчанию PHP ответит кодом 200 OK на успешный запрос, на использование функции die() или на создание нового ресурса. Собственно есть два пути кастомизировать ситуацию:

header('HTTP/1.1 404 Not Found'); // или header('Location: http://www.foo.com/bar', true, 201); // 201 CREATED 

Первый вариант достаточно стандартный метод установки кода ответа. Если же потребуется указать перенаправление на ресурс «201 Created» или «301 Moved Permanently», это несложно реализовать, указав код в третьем параметре функции header(), как показано в примере. Второй пример можно заменить на более удобочитаемый код:

header('HTTP/1.1 201 Created'); header('Location: http://www.foo.com/bar'); 

3. Отправка значимых HTTP заголовков

Смысл заключается в использовании прописанных в спецификации заголовков, которые являются вполне самодостаточными, но зачастую игнорируются или эмулируются более стереотипными решениями.

Читайте также:  Css column min width

201 Created — используется если был создан новый ресурс. Должен применяться с функционалом направления на ресурс, например /tech/news, т.к. сам автоматического направления не использует.

202 Accepted — как бы говорит клиенту «ваш заказ принят и скоро будет обработан». В отличие от кода 201, который отсылается после создания ресурса, код 202 ставит запрос в очередь.

204 No Content — В связке с кэшированием и условным GET запросом (запросы с If-Modified-Since/If-None-Match заголовками), позволяет сказать web-приложениям «контент не изменился, продолжайте юзать кэшированную версию», без повторной переработки и отправки кэша.

401 Unauthorized — должен использоваться при попытке обратиться к ресурсу, требующему определённого уровня доступа. Используется в связке с www-authentication.

500 Internal Server Error — гораздо лучше 200 OK, когда PHP скрипт уже не дышит или привёл к исключению.

Естественно заголовков гораздо больше, на эту тему неоднократно было написано, приведённые выше — всего лишь примеры.

4. Не используйте $_SESSION

Настоящее RESTful PHP приложение должно быть полностью независимо, все запросы должны содержать достаточно информации чтобы на них можно было отреагировать без дополнительных усилий со стороны сервера. На практике это подразумевает сохранение авторизационной информации в куках с датой (timestamp) и контрольной суммой. Дополнительная информация так же может быть сохранена в куках. В случае если требуется сохранить большие объёмы данных, их можно уложить в базу данных, авторизационную информацию стоит оставить в куках. UPD: Надо оговориться, что использование cookies не в полной мере соответствует идеологии REST, т.к. сеансовые связи сохраняются. Но в случае cookies информация о сеансе хранится у клиента, а в случае использования session сеансовые связи хранятся во временной директории сервера и в сессионной куке клиента (если включен «session.use_cookies»).

5. Тестирование при помощи cURL или rest-client

cURL позволяет легко выполнять любые HTTP методы для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент коммандной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.

Пример использования и базовые опции:

# curl -X PUT www.foo.com/bar/1 -d «some=var» -d «other=var2» -H «Accept: text/json» -I

-X [METHOD] определяет HTTP метод.
-d «name=value» устанавливает имя и значения переменных в POST/PUT.
-H [HEADER] устанавливает заголовок.
-I отображает заголовки ответа.

Так же существует бесплатный графический, основанный на Java/Swing, rest-client для тестирования REST. Он так же поддерживает JSON/XML.

Полезные ссылки по теме

Где так или иначе используется

* restful (англ.) — успокоительный; успокаивающий.

Источник

Оцените статью