No mundo do desenvolvimento web, os termos REST e RESTful são onipresentes. Embora pareçam a mesma coisa, entender a nuance entre o conceito e a prática é o que diferencia um desenvolvedor iniciante de um profissional que domina a arquitetura de sistemas.
Neste artigo, vamos desmistificar esses conceitos e construir uma API prática em PHP utilizando todos os verbos HTTP.
1. O que é REST? Link para o cabeçalho
REST (Representational State Transfer) é um estilo de arquitetura definido por Roy Fielding em 2000. Ele estabelece um conjunto de restrições que, quando seguidas, permitem a criação de sistemas web escaláveis, leves e de fácil manutenção.
As principais restrições incluem:
-
Client-Server: Separação total entre quem solicita os dados (cliente) e quem os armazena (servidor).
-
Stateless: O servidor não armazena o estado da sessão. Cada requisição deve ser autossuficiente.
-
Interface Uniforme: O uso padronizado de URIs e métodos HTTP.
2. O que é RESTful? Link para o cabeçalho
Uma API é considerada RESTful quando ela consegue aplicar, na prática, os princípios do REST. Enquanto o REST é o guia teórico, o RESTful é o sistema que ganhou vida seguindo esse guia.
Nota Importante: Uma API que usa apenas GET e POST para tudo não é RESTful. Para ser RESTful, é necessário usar os verbos corretos para cada tipo de operação.
3. Guia de Verbos HTTP (CRUD) Link para o cabeçalho
Para criar uma interface uniforme, utilizamos os métodos HTTP como “verbos” de ação:
| Verbo | Ação | Descrição |
|---|---|---|
| GET | Read | Recupera informações de um recurso. |
| POST | Create | Cria um novo recurso. |
| PUT | Update | Substitui um recurso existente por completo. |
| PATCH | Update | Modifica apenas partes específicas de um recurso. |
| DELETE | Delete | Remove um recurso específico. |
| OPTIONS | Metadata | Informa quais métodos o servidor suporta. |
4. Implementação Prática em PHP Link para o cabeçalho
Abaixo, um exemplo de um “Endpoint” de usuários que lida com todos os métodos para demonstrar uma aplicação RESTful:
<?php
/**
* API RESTful Simples em PHP
* Simula um CRUD de usuários
*/
header("Content-Type: application/json; charset=UTF-8");
// Captura o método e o ID (se enviado via URL como ?id=X)
$method = $_SERVER['REQUEST_METHOD'];
$id = isset($_GET['id']) ? (int)$_GET['id'] : null;
// Mock de dados (Simulando um Banco de Dados)
$banco_dados = [
1 => ["nome" => "Ana Silva", "email" => "ana@provedor.com"],
2 => ["nome" => "Carlos Souza", "email" => "carlos@provedor.com"]
];
switch ($method) {
case 'GET':
// Se houver ID, busca um; se não, lista todos
if ($id) {
$resposta = $banco_dados[$id] ?? ["erro" => "Usuário não encontrado"];
} else {
$resposta = $banco_dados;
}
echo json_encode($resposta);
break;
case 'POST':
// Recebe dados para criação
$entrada = json_decode(file_get_contents('php://input'), true);
$novo_id = count($banco_dados) + 1;
echo json_encode([
"status" => "Recurso Criado",
"id" => $novo_id,
"dados" => $entrada
]);
http_response_code(201); // Created
break;
case 'PUT':
// Atualização TOTAL do recurso
$entrada = json_decode(file_get_contents('php://input'), true);
echo json_encode([
"status" => "Recurso $id substituído integralmente",
"novos_dados" => $entrada
]);
break;
case 'PATCH':
// Atualização PARCIAL (Ex: mudar apenas o e-mail)
$entrada = json_decode(file_get_contents('php://input'), true);
echo json_encode([
"status" => "Campo " . array_key_first($entrada) . " do recurso $id atualizado",
"modificacao" => $entrada
]);
break;
case 'DELETE':
// Remoção do recurso
echo json_encode(["status" => "Recurso $id removido com sucesso"]);
break;
case 'OPTIONS':
// Essencial para o protocolo e para o navegador (CORS)
header("Allow: GET, POST, PUT, PATCH, DELETE, OPTIONS");
http_response_code(204); // No Content
break;
default:
http_response_code(405); // Method Not Allowed
echo json_encode(["erro" => "Método não suportado"]);
break;
}
5. Conclusão Link para o cabeçalho
Entender a diferença entre REST e RESTful permite que você construa APIs mais limpas e integráveis. Enquanto o REST fornece o mapa, o comportamento RESTful garante que você está dirigindo pelo caminho certo, respeitando os padrões da web.
A utilização correta de verbos como PATCH e PUT evita ambiguidades no desenvolvimento e facilita a vida de quem consome sua API, seja um Front-end em React, uma aplicação Mobile ou outro serviço de backend.