API REST
Resumo Simplificado
O que é uma API REST?
API REST (Representational State Transfer) é um estilo de arquitetura para sistemas distribuídos que
define regras para criar serviços web. É baseado em recursos, estados e operações HTTP padrão.
Conceitos Fundamentais
1. Recursos
Os recursos são entidades ou objetos de dados identificados por URLs específicas. Por exemplo:
/usuarios (coleção de usuários)
/usuarios/123 (usuário específico com ID 123)
2. Métodos HTTP
REST utiliza os métodos HTTP para definir operações sobre os recursos:
Método Função Exemplo
GET Obter dados GET /produtos - Lista todos os produtos
POST Criar novo recurso POST /produtos - Cria um novo produto
PUT Atualizar um recurso existente PUT /produtos/42 - Atualiza o produto 42
PATCH Atualizar parcialmente PATCH /produtos/42 - Atualiza só alguns campos
DELETE Remover um recurso DELETE /produtos/42 - Remove o produto 42
3. Representações
Os recursos podem ter diferentes representações, normalmente JSON ou XML:
json
{
"id": 123,
"nome": "João Silva",
"email": "joao@[Link]"
}
4. Stateless (Sem Estado)
Cada requisição ao servidor deve conter todas as informações necessárias para ser entendida. O
servidor não guarda estado entre requisições.
5. Códigos de Status HTTP
Informam sobre o resultado da operação:
2xx: Sucesso
200: OK
201: Created
204: No Content
4xx: Erro do cliente
400: Bad Request
401: Unauthorized
404: Not Found
5xx: Erro do servidor
500: Internal Server Error
Exemplo Prático
Requisição:
GET /api/produtos/123 HTTP/1.1
Host: [Link]
Accept: application/json
Resposta:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"nome": "Smartphone XYZ",
"preco": 1299.99,
"disponivel": true
}
Princípios REST
1. Interface Uniforme: Mantém a arquitetura simples e separada
2. Cliente-Servidor: Separa as responsabilidades
3. Sem Estado: Cada requisição é independente
4. Cacheable: As respostas informam se podem ser armazenadas em cache
5. Sistema em Camadas: O cliente não sabe se está conectado ao servidor final
6. Código sob Demanda (opcional): O servidor pode enviar código executável
Benefícios
Simplicidade: Usa padrões web existentes
Escalabilidade: Sem estado facilita distribuição
Independência: Separação cliente-servidor
Interoperabilidade: Qualquer cliente que entenda HTTP pode se comunicar
Visibilidade: Mais fácil de monitorar e debugar
API REST vs. RESTful
Uma API é considerada RESTful quando segue rigorosamente os princípios REST. Muitas APIs se
descrevem como "REST" mesmo não seguindo todos os princípios.
Implementação em [Link]/Express
Exemplo simples:
javascript
const express = require('express');
const app = express();
[Link]([Link]());
const produtos = [
{ id: 1, nome: 'Produto A', preco: 99.90 }
];
// Listar todos os produtos
[Link]('/api/produtos', (req, res) => {
[Link](produtos);
});
// Obter produto específico
[Link]('/api/produtos/:id', (req, res) => {
const produto = [Link](p => [Link] === parseInt([Link]));
if (!produto) return [Link](404).json({ erro: 'Produto não encontrado' });
[Link](produto);
});
// Criar novo produto
[Link]('/api/produtos', (req, res) => {
const novoProduto = {
id: [Link] + 1,
nome: [Link],
preco: [Link]
};
[Link](novoProduto);
[Link](201).json(novoProduto);
});
[Link](3000, () => [Link]('Servidor rodando na porta 3000'));
Boas Práticas
1. Utilizar Substantivos (não verbos) nas URLs:
✅ GET /produtos
❌ GET /getProdutos
2. Versionar sua API:
[Link]/v1/recursos
3. Usar Códigos de Status HTTP corretamente
4. Implementar Paginação para grandes conjuntos de dados:
GET /produtos?pagina=2&limite=10
5. Incluir tratamento de erros consistente
6. Usar HATEOAS (Hypermedia as the Engine of Application State):
json
{
"id": 1,
"nome": "Produto A",
"links": [
{"rel": "self", "href": "/produtos/1"},
{"rel": "categorias", "href": "/produtos/1/categorias"}
]
}
Conclusão
APIs REST são fundamentais para o desenvolvimento web moderno, permitindo a comunicação entre
sistemas de forma padronizada e eficiente. Compreender seus princípios é essencial para qualquer
desenvolvedor que trabalhe com aplicações web.