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

Вступление

Я прочитал следующее:

Протокол передачи гипертекста (HTTP) — это жизнь Интернета. Он используется каждый раз, когда вы передаете документ или делаете запрос AJAX. Но HTTP удивительно относительно неизвестен среди некоторых веб-разработчиков.

Глаголы HTTP составляют основную часть нашего ограничения «единого интерфейса» и предоставляют нам аналог действия основанному на существительном ресурсе. Основными или наиболее часто используемыми глаголами HTTP (или методами, как они правильно называются) являются POST, GET, ПОЛОЖИЛ, а также УДАЛЯТЬ.

А?

Ну, мы пришли к тому, что я потерял след.

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

Мой вопрос

Для чего нужны эти методы (PUT) и (DELETE) и, если возможно, использовать их в PHP, как мне поступить?

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

45

Решение

Что это за методы (PUT) и (DELETE) для …

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

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

  • использование ПОЛУЧИТЬ когда вам нужно получить доступ к ресурсу и получить данные, и вам не нужно изменять или изменять состояние этих данных.

  • использование СООБЩЕНИЕ когда вам нужно отправить некоторые данные на сервер. Ex. из формы, чтобы сохранить эти данные где-нибудь.

  • использование ГОЛОВА когда вам нужно получить доступ к ресурсу и получить только заголовки из ответа, без каких-либо данных ресурса.

  • использование ПОЛОЖИЛ когда вам нужно заменить состояние некоторых уже существующих данных в этой системе.

  • использование УДАЛЯТЬ когда вам нужно удалить ресурс (относительно отправленного вами 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 -Нет контента-).

41

Другие решения

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

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

Наиболее подходящим местом для использования этих методов (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/

10

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

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

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

10

Что это за методы (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-скриптом (например, с Перезапись URL), проверить метод запроса, разрабатывать с каким URL вы на самом деле имели дело, а затем написать код, чтобы сделать соответствующее действие.

9
По вопросам рекламы [email protected]