web-dev-qa-db-fra.com

Les protocoles PUT et DELETE du protocole HTTP et leur utilisation dans PHP

Introduction

J'ai lu ce qui suit:

Le protocole HTTP (Hypertext Transfer Protocol) est la vie du Web. Il est utilisé chaque fois que vous transférez un document, ou effectuez une demande AJAX. Mais, étonnamment, HTTP est relativement inconnu chez certains développeurs Web.

Les verbes HTTP constituent une partie importante de notre contrainte "interface uniforme" et nous fournissent la contrepartie d'action de la ressource nominale. Les verbes HTTP principaux ou les plus couramment utilisés (ou méthodes, comme ils sont correctement appelés) sont POST, GET, PUT , et SUPPRIMER .

Hein?

Eh bien, nous sommes arrivés au point où j'ai perdu la trace de choses.

PUT et DELETE, disent-ils. J'ai seulement entendu parler de POST et GET et je n'ai jamais vu quelque chose comme $_PUT ou $_DELETE _ en passant par n'importe quel PHP que j'ai jamais vu.

Ma question

A quoi servent ces méthodes (PUT) et (DELETE) et s'il est possible de les utiliser en PHP, comment procéder?.

Note: Je sais que ce n'est pas vraiment un problème mais je saisis toujours une opportunité d'apprentissage si j'en vois une et aimerais beaucoup apprendre à utiliser ces méthodes dans PHP si c'est possible.

53
user4446130

Quelles sont ces méthodes (PUT) et (DELETE) pour ...

Il y a beaucoup de mots à dépenser pour expliquer cela, et je ne suis pas assez habile pour le faire, mais comme déjà posté, un bref récapitulatif de ce que spécification HTTP décrit.

Le protocole dit essentiellement ceci:

  • utilisez [~ # ~] obtenez [~ # ~] lorsque vous avez besoin d'accéder à une ressource et d'extraire des données , et vous n'avez pas à modifier ou à modifier l'état de ces données.

  • utilisez [~ # ~] post [~ # ~] lorsque vous avez besoin d'envoyer des données sur le serveur. Ex. à partir d'un formulaire pour enregistrer ces données quelque part.

  • utilisez [~ # ~] head [~ # ~] lorsque vous avez besoin d'accéder à une ressource et d'extraire uniquement le En-têtes de la réponse , sans aucune donnée de ressource.

  • utiliser [~ # ~] mettre [~ # ~] lorsque vous avez besoin de déjà remplacer l'état de certaines données existant sur ce système.

  • utiliser [~ # ~] supprimer [~ # ~] lorsque vous avez besoin supprimer une ressource (par rapport à l'URI que vous avez envoyé) sur ce système.

  • utilisez [~ # ~] options [~ # ~] lorsque vous avez besoin d'obtenir les options de communication d'une ressource, donc pour vérifiant les méthodes autorisées pour cette ressource . Ex. nous l'utilisons pour les requêtes CORS et les règles de permissions.

  • Vous pouvez lire sur les deux méthodes restantes sur ce document, désolé je ne l'ai jamais utilisé.

En gros, un protocole est un ensemble de règles que vous devez utiliser à partir de votre application pour y adhérer.


... et s'il est possible de les utiliser en PHP, comment pourrais-je m'y prendre?.

À partir de votre application, vous devez récupérer la méthode utilisée avec $_SERVER['REQUEST_METHOD'] et réagit en conséquence.

Certaines applications utilisant des navigateurs qui ne prennent pas en charge les méthodes PUT ou DELETE utilisent cette astuce, un champ caché du code HTML, avec la valeur ex .:

<input name="_method" type="hidden" value="delete" />

Donc, à partir de l'application, vous pouvez maintenant reconnaître cela comme une demande DELETE.


Suivez une description simple de la façon dont PHP gère les paramètres:

Lorsque vous (votre navigateur, votre client) demandez une ressource à un serveur HTTP, vous devez utiliser l'une des méthodes acceptées par le protocole (HTTP). Donc, vous devez passer:

  • UNE MÉTHODE
  • Un Uri de la ressource
  • En-têtes de demande, tels que User-Agent, Host, Content-Length, etc.
  • (Corps optionnel de la requête)

une requête doit donc ressembler à:

GET /something/index.php?maybe=aparameter

Maintenant, dans votre application, PHP prenez les paramètres de cette requête GET et insérez-les dans un tableau superglobal (accessible dans l'ensemble de votre application). Vous pourrez ainsi accéder à $_GET['maybe'] qui retourne 'aparameter`.

Dans le cas d'une demande POST, vous demandez la ressource au serveur HTTP de la même manière mais avec une différence importante. Vous fournissez les données à l'intérieur du corps de la demande:

POST /something/index.php

(body) maybe=aparameter

Maintenant, dans votre application, PHP à partir de cette demande POST demandez les paramètres et insérez-les dans un tableau superglobal (accessible par l'ensemble de votre application). Vous pourrez ainsi accéder à $_POST['maybe'] qui retourne 'aparameter`.

Veuillez également faire très attention au code d'état de la réponse (par exemple, si vous avez reçu une demande PUT et que vous avez mis à jour cette ressource sans erreur, vous devez renvoyer un statut 204 -No content -) .

46
ilpaijin

Manière d'utiliser les données PUT de PHP:

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

PHP's $_GET et $_POST sont mal nommés. $_GET est utilisé pour accéder aux valeurs des paramètres de la chaîne de requête, et $_POST vous permet d'accéder au corps de la demande.

L'utilisation de paramètres de chaîne de requête n'est pas limitée aux requêtes GET, et d'autres types de requêtes que simplement POST peuvent être accompagnées d'un corps de requête.

Si vous voulez connaître le verbe utilisé pour demander la page, utilisez $_SERVER['REQUEST_METHOD'].

12
CodeCaster

L'endroit le plus approprié pour utiliser ces méthodes (PUT et DELETE) est l'API REST). Lorsque nous utilisons des méthodes http pour définir le mode de fonctionnement, vous souhaitez par exemple extraire des ressources:

GET http://api.example.com/employee/<any_id>

pour ajouter un nouvel article:

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

mettre à jour ou modifier:

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

supprimer une ressource existante:

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

etc.

Maintenant, du côté PHP, il vous suffit de lire la méthode utilisée par HTTP pour pouvoir effectuer une action en conséquence.

Il y a beaucoup de bibliothèques disponibles qui peuvent le faire pour vous.

10
Ashish Awasthi

Quelles sont ces méthodes (PUT) et (DELETE)

Il y a décrit dans la spécification HTTP .

En un mot et pour simplifier quelque peu, PUT sert à télécharger un fichier dans une URL et DELETE à supprimer un fichier d'une URL.

jamais vu quelque chose comme $_PUT ou $_DELETE en passant dans aucun PHP que j'ai jamais vu

$_POST Et $_GET Sont des superglobales terriblement nommées. $_POST Concerne les données analysées à partir du corps de la demande. $_GET Concerne les données analysées à partir de l'URL. Rien ne lie strictement les données de ces emplacements (notamment l'URL) à une méthode de demande particulière.

Les requêtes DELETE concernent uniquement le chemin de l'URL, il n'y a donc aucune donnée à analyser.

Les requêtes PUT concernent généralement tout le corps de la requête (et non une version analysée de celle-ci) auquel vous auriez accès avec file_get_contents('php://input');.

pour et s'il est possible de les utiliser en PHP, comment pourrais-je m'y prendre.

Vous devez mapper l'URL sur un script PHP (par exemple, avec réécriture d'URL ), testez la méthode de la requête , résolvez - quelle URL vous utilisiez réellement , puis écrivez du code pour effectuer l'action appropriée.

9
Quentin