Feito para minha noiva @Deise treinar testes em API, Aprenda os conceitos fundamentais de APIs de forma prática e objetiva. Desde métodos HTTP até autenticação, tudo que você precisa saber para começar.
Começar o Curso{
"curso": "APIs Básico",
"topicos": [
"Métodos HTTP",
"Headers",
"Autenticação",
"Response Codes"
],
"nivel": "Iniciante",
"duracao": "2 horas"
}
Uma API (Interface de Programação de Aplicações) é um conjunto de definições e protocolos que permite que diferentes softwares se comuniquem entre si. Pense nela como um "garçom" em um restaurante: você (o cliente) faz um pedido (requisição) ao garçom (API), que leva seu pedido à cozinha (servidor) e traz de volta o que você pediu (resposta).
// Exemplo de requisição API
fetch('https://api.exemplo.com/usuarios')
.then(response => response.json())
.then(data => console.log(data));
Os métodos HTTP indicam a ação que se deseja realizar em um recurso específico. São os "verbos" da comunicação API.
Solicita dados de um recurso específico. É seguro e idempotente.
GET /api/usuarios/123
Envia dados para criar um novo recurso no servidor.
POST /api/usuarios
{
"nome": "João",
"email": "joao@email.com"
}
Substitui completamente um recurso existente.
PUT /api/usuarios/123
{
"nome": "João Silva",
"email": "joao.silva@email.com"
}
Aplica modificações parciais a um recurso.
PATCH /api/usuarios/123
{
"email": "novo@email.com"
}
Remove um recurso específico do servidor.
DELETE /api/usuarios/123
Os Headers HTTP são pares de chave-valor que transmitem metadados sobre a requisição ou resposta. Eles fornecem informações adicionais que não fazem parte do corpo da mensagem.
Content-Type: application/json
Accept: application/json
Authorization: Bearer token123
User-Agent: MeuApp/1.0
Content-Type: application/json
Content-Length: 1234
Cache-Control: no-cache
Server: nginx/1.18
Parâmetros são informações adicionais enviadas para que o servidor saiba exatamente o que você deseja ou para fornecer dados que serão processados.
Anexados ao final da URL após um "?"
GET /api/produtos?
categoria=eletronicos&
ordenar_por=preco&
limite=10
Incorporados na estrutura da URL
GET /api/usuarios/123
PUT /api/produtos/camiseta-azul
Dados enviados no corpo da requisição
{
"nome": "Ana",
"email": "ana@email.com",
"idade": 30
}
Após processar uma requisição, o servidor envia uma resposta contendo dados solicitados e informações sobre o resultado da operação.
Código | Significado | Descrição |
---|---|---|
200 | OK | Requisição bem-sucedida |
201 | Created | Recurso criado com sucesso |
400 | Bad Request | Sintaxe inválida na requisição |
401 | Unauthorized | Autenticação necessária |
404 | Not Found | Recurso não encontrado |
500 | Internal Server Error | Erro interno do servidor |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 156
{
"id": 123,
"nome": "João da Silva",
"email": "joao@email.com",
"ativo": true,
"criado_em": "2024-01-15T10:30:00Z"
}
A autenticação verifica a identidade de um cliente que tenta acessar uma API, garantindo que apenas usuários autorizados possam interagir com os recursos.
Token único que identifica o projeto ou aplicação
GET /api/dados
X-API-Key: sua_chave_aqui
Token de acesso obtido após autenticação
GET /api/perfil
Authorization: Bearer eyJhbGc...
Usuário e senha codificados em Base64
GET /api/recursos
Authorization: Basic dXN1YXJpbz...
Framework de autorização para acesso delegado
// Fluxo OAuth
1. Autorização
2. Troca por token
3. Uso do token
JavaScript Object Notation - formato leve e fácil de ler
{
"nome": "Alice",
"idade": 30,
"cidade": "São Paulo",
"interesses": ["leitura", "viagem"],
"ativo": true
}
Extensible Markup Language - formato estruturado com tags
<pessoa>
<nome>Bob</nome>
<idade>25</idade>
<cidade>Rio de Janeiro</cidade>
<interesses>
<interesse>música</interesse>
<interesse>esportes</interesse>
</interesses>
</pessoa>
Para interagir com uma API, você precisa saber onde ela "mora" na internet. É aí que entram os conceitos de URL e Endpoint.
https://api.example.com/v1/usuarios/123?incluir_pedidos=true
│ │ │ │ │ │
│ │ │ │ │ └─ Query Parameter
│ │ │ │ └─ Path Parameter (ID)
│ │ │ └─ Recurso
│ │ └─ Versão da API
│ └─ Domínio da API
└─ Protocolo (HTTPS)
GET /produtos
GET /produtos/123
POST /produtos
PUT /produtos/123
DELETE /produtos/123
GET /usuarios
GET /usuarios/456/pedidos
POST /usuarios/456/pedidos
GET /categorias
POST /auth/login
Rate Limiting é uma estratégia para controlar o número de requisições que um cliente pode fazer a uma API dentro de um período de tempo determinado.
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1678886400
{
"data": "..."
}
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1678886460
{
"error": "Rate limit exceeded",
"message": "Try again in 60 seconds"
}
Enquanto APIs tradicionais funcionam com requisição-resposta, Webhooks operam de forma inversa: o servidor "empurra" dados para o cliente quando algo acontece.
// Cliente pergunta constantemente
setInterval(() => {
fetch('/api/novos-pedidos')
.then(response => response.json())
.then(data => {
if (data.length > 0) {
processarPedidos(data);
}
});
}, 5000); // A cada 5 segundos
// Servidor notifica quando acontece
app.post('/webhook/novo-pedido', (req, res) => {
const pedido = req.body;
processarPedido(pedido);
res.status(200).send('OK');
});
// Registrar webhook
POST /api/webhooks
{
"url": "https://meuapp.com/webhook/novo-pedido",
"eventos": ["pedido.criado"]
}