Como identificar o tipo de requisição HTTP em PHP: GET, POST, PUT, DELETE

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que é importante saber qual requisição chegou ao servidor?

\n\n

Imagine 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\n

A 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.

\n\n

Este artigo foi escrito para o site educacional PythonLib, mas o tema é universal. Vamos nessa!

\n\n

O que são métodos HTTP e por que diferenciá-los?

\n

HTTP é 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
\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\n

A ferramenta principal: $_SERVER['REQUEST_METHOD']

\n

No 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.

\n\n

Veja um exemplo básico:

\n
<?php\n$method = $_SERVER['REQUEST_METHOD'];\necho "Tipo de requisição: " . $method;\n?>
\n

Execute 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.

\n\n

Mas isso é só o começo. Vamos entender como construir a lógica correta com base no método.

\n\n

Exemplo prático: roteador para uma REST API

\n

Suponha 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
    \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
\n\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                

Blogs

Book Recommendations