Introduction : pourquoi est-il crucial de connaître le type de requête reçue par le serveur ?
\n\nImaginez que vous êtes le concierge d’un immeuble de standing. Différentes personnes se présentent : certaines veulent simplement consulter la liste des résidents (GET), d’autres ajouter un nouveau résident (POST), d’autres encore mettre à jour des informations (PUT), et enfin certaines supprimer un dossier (DELETE). Si vous confondez les actions, c’est le chaos assuré. C’est exactement ce qui se passe en PHP lorsque vous développez une application web moderne ou une API REST.
\n\nLa question "Détecter le type de requête en PHP (GET, POST, PUT ou DELETE)" est l’une des plus posées sur Stack Overflow (des milliers de vues). Et ce n’est pas un hasard. Les débutants écrivent souvent if ($_POST) et rencontrent des bugs lorsqu’une requête PUT ou DELETE arrive. Aujourd’hui, nous allons voir une fois pour toutes comment détecter correctement la méthode HTTP en PHP, pour un code fiable et professionnel.
Cet article est rédigé pour le site éducatif PythonLib, mais le sujet est universel. C’est parti !
\n\nQue sont les méthodes HTTP et pourquoi les distinguer ?
\nHTTP est le protocole par lequel le navigateur (ou le client) communique avec le serveur. Chaque requête possède une méthode (un verbe) qui indique au serveur l’action à effectuer :
\n- \n
- GET — récupérer des données (lecture). Sûre, idempotente. \n
- POST — envoyer des données (créer une nouvelle ressource). \n
- PUT — remplacer complètement une ressource (mise à jour). \n
- DELETE — supprimer une ressource. \n
- PATCH — mise à jour partielle (moins fréquent). \n
Dans les formulaires HTML classiques, le navigateur ne supporte que GET et POST. Mais dans une API REST (par exemple pour des applications mobiles ou AJAX), toutes les méthodes sont utilisées activement. Si vous développez un backend universel, vous devez savoir les distinguer.
\n\nL’outil essentiel : $_SERVER['REQUEST_METHOD']
\nEn PHP, toutes les informations sur la requête sont stockées dans le tableau superglobal $_SERVER. La clé REQUEST_METHOD contient une chaîne avec le nom de la méthode : 'GET', 'POST', 'PUT', 'DELETE', etc.
Voici un exemple de base :
\n<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "Type de requête : " . $method;\n?>\nExécutez ce code sur votre serveur. Si vous ouvrez la page dans un navigateur, vous verrez GET. Si vous envoyez un formulaire avec method="POST", vous verrez POST. Simple comme bonjour.
Mais ce n’est que le début. Voyons maintenant comment construire une logique basée sur la méthode.
\n\nExemple pratique : un routeur pour API REST
\nSupposons que nous développions une API simple pour gérer une liste de tâches (to-do list). Nous avons un seul endpoint — /api/tasks. En fonction de la méthode de la requête, nous effectuons différentes actions :
- \n
- GET — retourner la liste de toutes les tâches. \n
- POST — créer une nouvelle tâche. \n
- PUT — mettre à jour une tâche existante (remplacement complet). \n
- DELETE — supprimer une tâche. \n
Voici à quoi cela ressemble en code :
\n<?php\n// Détection de la méthode de la requête\n$method = $_SERVER['REQUEST_METHOD'];\n\n// Routage\nswitch ($method) {\n case 'GET':\n // Traitement de la requête GET\n echo "Affichage de la liste des tâches...";\n // Logique de récupération des données depuis la BDD\n break;\n\n case 'POST':\n // Traitement de la requête POST\n echo "Création d'une nouvelle tâche...";\n // $_POST contient les données du formulaire\n $title = $_POST['title'] ?? '';\n // Logique de sauvegarde en BDD\n break;\n\n case 'PUT':\n // Traitement de la requête PUT\n echo "Mise à jour de la tâche...";\n // IMPORTANT : les données PUT ne sont pas dans $_POST !\n // Il faut les lire depuis php://input\n $pu