Introducción: ¿Por qué es importante saber qué tipo de solicitud llega al servidor?
\n\nImagina que eres el portero de un edificio exclusivo. Llegan diferentes personas: unas solo quieren ver la lista de residentes (GET), otras agregar un nuevo residente (POST), otras actualizar datos (PUT) y otras eliminar un registro (DELETE). Si confundes las acciones, se arma el caos. Exactamente lo mismo ocurre en PHP cuando construyes una aplicación web moderna o una API REST.
\n\nLa pregunta "Detecting request type in PHP (GET, POST, PUT or DELETE)" es una de las más populares en Stack Overflow (miles de visitas). Y no es casualidad. Los principiantes suelen escribir: if ($_POST) y se topan con errores cuando llega un PUT o DELETE. Hoy vamos a entender de una vez por todas cómo detectar correctamente el método de solicitud HTTP en PHP para que tu código sea robusto y profesional.
Este artículo está escrito para el sitio educativo PythonLib, pero el tema es universal. ¡Allá vamos!
\n\n¿Qué son los métodos HTTP y por qué diferenciarlos?
\nHTTP es el protocolo mediante el cual el navegador (o cliente) se comunica con el servidor. Cada solicitud tiene un método (verbo) que le indica al servidor qué acción realizar:
\n- \n
- GET — obtener datos (leer). Seguro e idempotente. \n
- POST — enviar datos (crear un nuevo recurso). \n
- PUT — reemplazar completamente un recurso (actualizar). \n
- DELETE — eliminar un recurso. \n
- PATCH — actualizar parcialmente (menos común). \n
En los formularios HTML clásicos, el navegador solo admite GET y POST. Pero en las API REST (por ejemplo, para aplicaciones móviles o AJAX) se usan activamente todos los métodos. Si escribes un backend universal, necesitas saber diferenciarlos.
\n\nLa herramienta principal: $_SERVER['REQUEST_METHOD']
\nEn PHP, toda la información de la solicitud se almacena en el array superglobal $_SERVER. La clave REQUEST_METHOD contiene una cadena con el nombre del método: 'GET', 'POST', 'PUT', 'DELETE', etc.
Aquí tienes un ejemplo básico:
\n<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "Tipo de solicitud: " . $method;\n?>\nEjecuta este código en tu servidor. Si abres la página en el navegador, verás GET. Si envías un formulario con method="POST", verás POST. Todo es increíblemente simple.
Pero esto es solo el comienzo. Veamos cómo construir la lógica correcta según el método.
\n\nEjemplo práctico: enrutador para una API REST
\nSupongamos que escribimos una API simple para gestionar una lista de tareas (to-do list). Tenemos un solo endpoint: /api/tasks. Dependiendo del método de solicitud, realizamos diferentes acciones:
- \n
- GET — devolver la lista de todas las tareas. \n
- POST — crear una nueva tarea. \n
- PUT — actualizar una tarea existente (reemplazar por completo). \n
- DELETE — eliminar una tarea. \n
Así se ve en código:
\n<?php\n// Detectamos el método de la solicitud\n$method = $_SERVER['REQUEST_METHOD'];\n\n// Enrutamiento\nswitch ($method) {\n case 'GET':\n // Procesar solicitud GET\n echo "Mostrando lista de tareas...";\n // Aquí va la lógica para obtener datos de la BD\n break;\n\n case 'POST':\n // Procesar solicitud POST\n echo "Creando nueva tarea...";\n // $_POST contiene los datos del formulario\n $title = $_POST['title'] ?? '';\n // Lógica para guardar en la BD\n break;\n\n case 'PUT':\n // Procesar solicitud PUT\n echo "Actualizando tarea...";\n // IMPORTANTE: ¡Los datos PUT no llegan a $_POST!\n // Hay que leerlos desde php://input\n $pu