Introdução: por que é importante saber qual requisição chegou ao servidor?
\n\nImagine que você é o porteiro de um prédio de alto padrão. Chegam pessoas com diferentes intenções: algumas querem apenas consultar a lista de moradores (GET), outras desejam adicionar um novo morador (POST), algumas precisam atualizar os dados (PUT) e outras querem remover um registro (DELETE). Se você confundir as ações, o caos se instala. O mesmo acontece no PHP ao construir uma aplicação web moderna ou uma REST API.
\n\nA questão "Detecting request type in PHP (GET, POST, PUT or DELETE)" é uma das mais populares no Stack Overflow (milhares de visualizações). E não é por acaso. Iniciantes costumam usar if ($_POST) e acabam encontrando bugs quando chegam requisições PUT ou DELETE. Hoje vamos entender de uma vez por todas como identificar corretamente o método HTTP no PHP, tornando seu código robusto e profissional.
Este artigo foi escrito para o site educacional PythonLib, mas o tema é universal. Vamos nessa!
\n\nO que são métodos HTTP e por que diferenciá-los?
\nHTTP é o protocolo pelo qual o navegador (ou cliente) se comunica com o servidor. Cada requisição possui um método (verbo) que indica ao servidor o que deve ser feito:
\n- \n
- GET — obter dados (leitura). Seguro e idempotente. \n
- POST — enviar dados (criar um novo recurso). \n
- PUT — substituir completamente um recurso (atualizar). \n
- DELETE — remover um recurso. \n
- PATCH — atualizar parcialmente (menos comum). \n
Em formulários HTML tradicionais, o navegador só suporta GET e POST. Porém, em REST APIs (para aplicativos mobile ou AJAX, por exemplo), todos os métodos são amplamente utilizados. Ao desenvolver um backend versátil, é essencial saber diferenciá-los.
\n\nA ferramenta principal: $_SERVER['REQUEST_METHOD']
\nNo PHP, todas as informações da requisição ficam armazenadas no array superglobal $_SERVER. A chave REQUEST_METHOD contém uma string com o nome do método: 'GET', 'POST', 'PUT', 'DELETE' e assim por diante.
Veja um exemplo básico:
\n<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "Tipo de requisição: " . $method;\n?>\nExecute este código no seu servidor. Se você abrir a página no navegador, verá GET. Se enviar um formulário com method="POST", verá POST. Simples e genial.
Mas isso é só o começo. Vamos entender como construir a lógica correta com base no método.
\n\nExemplo prático: roteador para uma REST API
\nSuponha que estamos criando uma API simples para gerenciar uma lista de tarefas (to-do list). Temos um único endpoint — /api/tasks. Dependendo do método da requisição, executamos ações diferentes:
- \n
- GET — retornar a lista de todas as tarefas. \n
- POST — criar uma nova tarefa. \n
- PUT — atualizar uma tarefa existente (substituir completamente). \n
- DELETE — remover uma tarefa. \n
Veja como fica no código:
\n<?php\n// Identifica o método da requisição\n$method = $_SERVER['REQUEST_METHOD'];\n\n// Roteamento\nswitch ($method) {\n case 'GET':\n // Processa requisição GET\n echo "Exibindo lista de tarefas...";\n // Lógica para obter dados do banco\n break;\n\n case 'POST':\n // Processa requisição POST\n echo "Criando nova tarefa...";\n // $_POST contém os dados do formulário\n $title = $_POST['title'] ?? '';\n // Lógica para salvar no banco\n break;\n\n case 'PUT':\n // Processa requisição PUT\n echo "Atualizando tarefa...";\n // IMPORTANTE: dados PUT não vão para $_POST!\n // É preciso ler de php://input\n $pu