Протокол 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/