Протокол HTTP PUT и DELETE и их использование в PHP
Введение
Я читал следующее:
Протокол передачи гипертекста (HTTP) - это жизнь в Интернете. Он используется каждый раз, когда вы переносите документ, или делаете запрос AJAX. Но HTTP на удивление относительно неизвестен среди некоторых веб-разработчиков.
Глаголы HTTP составляют основную часть ограничения "единого интерфейса" и предоставляют нам действие, эквивалентное ресурсу, основанному на существительном. Первичные или наиболее часто используемые HTTP-глаголы (или методы, поскольку они правильно называются): POST, GET, PUT и DELETE.
А?
Ну, мы пришли к тому, что я потерял все.
PUT
и DELETE
, говорят они. Я только слышал о POST
и GET
и никогда не видел что-то вроде $_PUT
или $_DELETE
, проходящего в любом PHP-коде, который я когда-либо просматривал.
Мой вопрос
Каковы эти методы (PUT) и (DELETE), и если можно использовать их в PHP, как бы я это сделал.
Примечание.. Я знаю, что это не проблема, но я всегда получаю возможность обучения, если увижу ее, и очень хотел бы научиться использовать эти методы в PHP, если это возможно.
Ответы
Ответ 1
Что это за методы (PUT) и (DELETE) для...
Есть много слов, чтобы потратить, чтобы объяснить это, и я недостаточно квалифицирован, чтобы сделать это, но, как уже было опубликовано, краткое описание того, что Спецификация HTTP.
Протокол в основном говорит об этом:
-
используйте GET, когда вам нужно получить доступ к ресурсу и получить данные, и вам не нужно изменять или изменять состояние этих данных.
-
используйте POST, когда вам нужно отправить некоторые данные на сервер. Ex. из формы, чтобы сохранить эти данные где-то.
-
используйте HEAD, когда вам нужно получить доступ к ресурсу и получить только заголовки из ответа без каких-либо данных ресурсов.
-
используйте PUT, когда вам нужно заменить состояние некоторых существующих данных на этой системе.
-
используйте УДАЛИТЬ, когда вам нужно удалить ресурс (относительно отправленного вами URI) в этой системе.
-
используйте ОПЦИИ, когда вам нужно получить параметры связи с ресурсом, поэтому для проверки разрешенных методов для этого ресурса. Ex. мы используем его для правил запроса и разрешений CORS.
- Вы можете прочитать о двух оставшихся методах в этом документе, извините, что я никогда не использовал его.
В основном протокол - это набор правил, которые вы должны использовать из своего приложения, чтобы придерживаться его.
... и если возможно использовать их в PHP, как бы я это сделал.
Из вашего приложения вы должны получить, какой метод был использован с $_SERVER['REQUEST_METHOD']
и реагировать соответственно.
Некоторые приложения, работающие с браузерами, которые не поддерживают методы PUT или DELETE, используют этот трюк, скрытое поле из html, со значением ex.:
<input name="_method" type="hidden" value="delete" />
Итак, из приложения вы теперь можете распознать это как запрос DELETE.
Следуйте простому описанию того, как PHP обрабатывает параметры:
Когда вы (ваш браузер, ваш клиент) запрашиваете ресурс на HTTP-сервере, вы должны использовать один из методов, который принимает протокол (HTTP). Поэтому вам нужно пройти:
- МЕТОД
- Ури ресурса
- Заголовки запроса, такие как User-Agent, Host, Content-Length и т.д.
- (необязательный элемент запроса)
поэтому запрос должен выглядеть так:
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 - нет содержимого -).
Ответ 2
Способ использования PUT-данных из PHP:
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
parse_str(file_get_contents('php://input'), $_PUT);
var_dump($_PUT); //$_PUT contains put fields
}
Ответ 3
PHP $_GET
и $_POST
плохо названы. $_GET
используется для доступа к значениям параметров строки запроса, а $_POST
позволяет получить доступ к телу запроса.
Использование параметров строки запроса не ограничено запросами GET, а другие запросы, кроме POST, могут иметь тело запроса.
Если вы хотите узнать глагол, используемый для запроса страницы, используйте $_SERVER['REQUEST_METHOD']
.
Ответ 4
Каковы эти методы (PUT) и (DELETE)
Есть описанный в спецификации 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 script (например, с помощью перезаписи URL-адресов), проверить метод запроса, выполните на каком URL вы фактически имели дело, а затем напишите код, чтобы выполнить соответствующее действие.
Ответ 5
Наиболее подходящим местом для использования этих методов (PUT и DELETE) является REST API. Если мы используем методы http для определения режима работы, например, вы хотите получить любые ресурсы, вы можете использовать следующее:
GET http://api.example.com/employee/<any_id>
чтобы добавить новый элемент:
POST http://api.example.com/employee/
для обновления или редактирования:
PUT http://api.example.com/employee/
Удалить существующий ресурс:
DELETE http://api.example.com/employee/1
и др.
Теперь на стороне PHP
вам просто нужно прочитать, какой метод HTTP
используется, чтобы вы могли сделать действие в соответствии с этим.
есть много доступных библиотек, которые могут сделать это для вас.
это один очень хороший пример: http://phphttpclient.com/