Introdução ao REST
REST (Representational State Transfer — Transferência Representacional de Estado) é um estilo arquitetural voltado para o design de sistemas distribuídos, especialmente APIs (Application Programming Interfaces) na web. Proposto por Roy Fielding em sua tese de doutorado em 2000, o REST busca estruturar serviços web de forma simples, escalável e baseada nos princípios do HTTP (Hypertext Transfer Protocol).
Ao contrário de um protocolo ou padrão rígido, o REST é um conjunto de diretrizes que orienta a comunicação entre sistemas de maneira stateless (sem manter estado no servidor), utilizando recursos como entidades identificáveis.
Sua popularidade se deve à capacidade de aproveitar os recursos nativos da web:
- URIs (Uniform Resource Identifiers) para identificar recursos.
 - Métodos HTTP para realizar operações.
 - Representações como JSON ou XML para transmitir dados.
 
Princípios Fundamentais
Os princípios do REST derivam de restrições propostas por Fielding para tornar sistemas mais previsíveis, performáticos e interoperáveis.
Cliente-Servidor (Client-Server)
Separação clara entre cliente e servidor. Cada parte pode evoluir de forma independente, facilitando manutenção e escalabilidade.Sem Estado (Stateless)
Cada requisição deve conter todas as informações necessárias para ser processada. O servidor não armazena sessão, o que facilita o escalonamento horizontal.Cacheável (Cacheable)
Respostas podem ser cacheadas para reduzir latência e tráfego, melhorando desempenho.- 
Interface Uniforme (Uniform Interface)
Padroniza a interação com recursos por meio de:- Identificação de recursos por URIs (ex.: 
/usuarios/123). - Manipulação por representações (ex.: JSON ou XML).
 - Mensagens auto-descritivas com metadados (ex.: 
Content-Type). - HATEOAS (Hypermedia as the Engine of Application State): inclusão de links para ações possíveis.
 
 - Identificação de recursos por URIs (ex.: 
 Sistema em Camadas (Layered System)
A arquitetura pode conter várias camadas (balanceadores, firewalls, caches), mantendo o isolamento de cada nível.Código Sob Demanda (Code on Demand) – opcional
Possibilidade de o servidor enviar código executável (ex.: JavaScript) ao cliente para ampliar funcionalidades.
Como Funciona
Em uma API RESTful, recursos (usuários, produtos, pedidos, etc.) são expostos como endpoints acessíveis via HTTP. O modelo segue a lógica CRUD (Create, Read, Update, Delete), mapeada para métodos HTTP:
- GET – Ler um recurso.
 - POST – Criar um novo recurso.
 - PUT – Atualizar recurso existente.
 - PATCH – Atualizar parcialmente um recurso.
 - DELETE – Remover um recurso.
 
Elementos principais de uma requisição:
- URI – Identifica o recurso (ex.: 
/agents/e370fa57-4757-3604-3648-499e1f642d3f). - Headers – Metadados (ex.: 
Content-Type: application/json). - Body – Dados enviados (em POST, PUT, PATCH).
 - Query Params – Filtros e parâmetros opcionais (ex.: 
?idade=30). 
Elementos comuns de uma resposta:
- Código de Status HTTP – Resultado da operação (
200 OK,201 Created,404 Not Found, etc.). - Body – Representação do recurso (JSON, XML, etc.).
 - Headers – Informações adicionais (ex.: 
Content-Type,Date). 
Por ser stateless, cada requisição é independente — autenticação e contexto devem ser enviados a cada chamada (ex.: via JWT).
Vantagens
- Simplicidade – Usa padrões HTTP já conhecidos.
 - Escalabilidade – Arquitetura stateless facilita expansão.
 - Interoperabilidade – Compatível com qualquer linguagem que suporte HTTP.
 - Performance com Cache – Reduz carga no servidor.
 - Separação de responsabilidades – Cliente e servidor evoluem de forma independente.
 
Desvantagens
- Falta de padronização rígida – Implementações variam.
 - Overfetching/Underfetching – Pode retornar dados de mais ou de menos.
 - Segurança – Depende de implementação correta (HTTPS, autenticação).
 - HATEOAS pouco usado – Complexidade elevada e baixa adoção prática.
 
Em resumo, REST mudou a forma como desenvolvemos APIs, oferecendo uma abordagem simples, escalável e integrada à própria web.
📚 Leia mais: Representational State Transfer – Roy Fielding
              
    
Top comments (0)