Guia de Testes e Depuração de API: Do cURL às Ferramentas Online
Ferramentas de desenvolvimento
Métodos de Requisição HTTP
| Método | Uso | Idempotente | Seguro |
|---|---|---|---|
| GET | Obter recurso | ✅ | ✅ |
| POST | Criar recurso | ❌ | ❌ |
| PUT | Atualização completa | ✅ | ❌ |
| PATCH | Atualização parcial | ❌ | ❌ |
| DELETE | Excluir recurso | ✅ | ❌ |
| HEAD | Obter cabeçalhos | ✅ | ✅ |
| OPTIONS | Preflight CORS | ✅ | ✅ |
Cabeçalhos de Requisição Comuns
| Cabeçalho | Descrição | Exemplo |
|---|---|---|
Content-Type |
Formato do corpo | application/json |
Accept |
Formato de resposta esperado | application/json |
Authorization |
Informação de autenticação | Bearer token... |
User-Agent |
Identificação do cliente | Mozilla/5.0... |
Cookie |
Cookie | session=abc123 |
X-Request-ID |
ID de rastreamento da requisição | UUID |
Valores Comuns de Content-Type
| Valor | Uso |
|---|---|
application/json |
Dados JSON |
application/x-www-form-urlencoded |
Dados de formulário |
multipart/form-data |
Upload de arquivos |
text/plain |
Texto puro |
text/html |
HTML |
Métodos de Autenticação
1. Bearer Token (mais usado)
# cURL
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
https://api.example.com/users
# JavaScript
fetch('https://api.example.com/users', {
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9...',
},
});
2. Basic Auth
# cURL (codificação automática)
curl -u username:password https://api.example.com/users
# Codificação manual
# Base64("username:password") = "dXNlcm5hbWU6cGFzc3dvcmQ="
curl -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
https://api.example.com/users
3. API Key
# Método 1: Header
curl -H "X-API-Key: your-api-key" \
https://api.example.com/users
# Método 2: Parâmetro de consulta
curl "https://api.example.com/users?api_key=your-api-key"
Detalhes do Comando cURL
Requisição GET Básica
# GET mais simples
curl https://api.example.com/users
# Mostrar cabeçalhos de resposta
curl -i https://api.example.com/users
# Mostrar apenas cabeçalhos de resposta
curl -I https://api.example.com/users
# Seguir redirecionamentos
curl -L https://example.com/redirect
Requisição POST
# Dados JSON
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@example.com"}'
# Dados de formulário
curl -X POST https://api.example.com/users \
-d "name=Alice&email=alice@example.com"
# Upload de arquivo
curl -X POST https://api.example.com/upload \
-F "file=@photo.jpg" \
-F "description=My photo"
Opções Avançadas
# Configuração de timeout
curl --connect-timeout 5 --max-time 30 https://api.example.com
# Salvar em arquivo
curl -o response.json https://api.example.com/users
# Modo silencioso (sem barra de progresso)
curl -s https://api.example.com/users
# Saída detalhada (para depuração)
curl -v https://api.example.com/users
# Ignorar verificação de certificado SSL (apenas ambiente de desenvolvimento)
curl -k https://self-signed.example.com
# Proxy
curl -x http://proxy:8080 https://api.example.com
# Cookie
curl -b "session=abc123" https://api.example.com/users
# Salvar e enviar Cookie
curl -c cookies.txt -b cookies.txt https://api.example.com/users
Códigos de Status HTTP Comuns
| Código | Significado | Causa Comum |
|---|---|---|
| 200 | OK | Sucesso |
| 201 | Created | POST criado com sucesso |
| 204 | No Content | DELETE com sucesso |
| 301 | Moved Permanently | Redirecionamento permanente |
| 304 | Not Modified | Cache acertado |
| 400 | Bad Request | Parâmetros incorretos |
| 401 | Unauthorized | Não autenticado |
| 403 | Forbidden | Sem permissão |
| 404 | Not Found | Recurso não existe |
| 409 | Conflict | Conflito de recurso |
| 422 | Unprocessable Entity | Validação falhou |
| 429 | Too Many Requests | Limitação de taxa |
| 500 | Internal Server Error | Erro do servidor |
| 502 | Bad Gateway | Serviço upstream indisponível |
| 503 | Service Unavailable | Serviço sobrecarregado |
Usar ToolsKu para Testar API
Converter cURL para Código
- Abrir Ferramenta cURL para Código
- Colar o comando cURL
- Selecionar a linguagem destino (JavaScript/Python/Go/Java, etc.)
- Copiar o código gerado
Exemplo
# Entrada cURL
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token123" \
-d '{"name": "Alice"}'
Convertido para JavaScript:
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token123',
},
body: JSON.stringify({ name: 'Alice' }),
});
const data = await response.json();
Técnicas de Depuração de API
1. Ver Requisição/Resposta Completa
# -v mostra informações detalhadas
curl -v https://api.example.com/users
# Saída:
> GET /users HTTP/1.1 ← Linha de requisição
> Host: api.example.com ← Cabeçalho de requisição
> Authorization: Bearer ...
>
< HTTP/1.1 200 OK ← Linha de resposta
< Content-Type: application/json ← Cabeçalho de resposta
< X-RateLimit-Remaining: 99
<
[{"id": 1, "name": "Alice"}] ← Corpo da resposta
2. Formatar Resposta JSON
# Usar jq para formatar
curl -s https://api.example.com/users | jq
# Usar python
curl -s https://api.example.com/users | python -m json.tool
# Ou usar a ferramenta de formatação JSON do ToolsKu
3. Medir Tempo de Resposta
# Estatísticas detalhadas de tempo
curl -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
-o /dev/null -s https://api.example.com/users
# Saída:
# DNS: 0.012s
# Connect: 0.035s
# TTFB: 0.120s
# Total: 0.125s
4. Solucionar Problemas de CORS
Erro do navegador:
Access to fetch at 'https://api.example.com' from origin 'https://app.example.com'
has been blocked by CORS policy
Passos para solucionar:
1. Verificar requisição preflight OPTIONS
curl -X OPTIONS -H "Origin: https://app.example.com" \
-H "Access-Control-Request-Method: POST" \
-i https://api.example.com/users
2. Verificar cabeçalhos de resposta
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400
5. Solucionar Problemas de Autenticação
Solução de 401 Unauthorized:
1. O Token expirou? → Usar ferramenta de decodificação JWT para verificar exp
2. O formato do Token está correto? → Verificar prefixo Bearer
3. O Token foi enviado? → curl -v verificar cabeçalhos de requisição
Solução de 403 Forbidden:
1. O usuário tem permissão? → Verificar função do usuário
2. O IP está na lista de permissão? → Verificar logs do servidor
3. Excedeu o limite de frequência? → Verificar código de status 429
Melhores Práticas de Testes de API
1. Gestão de Variáveis de Ambiente
# Usar variáveis de ambiente para armazenar informações sensíveis
export API_BASE="https://api.example.com"
export API_TOKEN="your-token"
curl -H "Authorization: Bearer $API_TOKEN" "$API_BASE/users"
2. Coleção de Requisições
#!/bin/bash
# api-test.sh
BASE="https://api.example.com"
TOKEN="Bearer $API_TOKEN"
HEADER="-H 'Content-Type: application/json' -H 'Authorization: $TOKEN'"
# Obter lista de usuários
get_users() { curl -s $HEADER "$BASE/users" | jq; }
# Criar usuário
create_user() { curl -s -X POST $HEADER -d "$1" "$BASE/users" | jq; }
# Obter um usuário
get_user() { curl -s $HEADER "$BASE/users/$1" | jq; }
# Uso
get_users
create_user '{"name":"Bob"}'
get_user 1
3. Testes Automatizados
// Escrever testes de API com fetch
async function testApi() {
// Testar GET
const listRes = await fetch('/api/users');
console.assert(listRes.status === 200, 'GET /users should return 200');
// Testar POST
const createRes = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'Test' }),
});
console.assert(createRes.status === 201, 'POST /users should return 201');
const created = await createRes.json();
console.assert(created.name === 'Test', 'Name should match');
}
Perguntas Frequentes
Problemas com aspas do cURL no Windows?
O CMD do Windows usa aspas duplas, o PowerShell tem problemas de escape:
# No PowerShell, cURL é um alias de Invoke-WebRequest
# Usar curl.exe para invocar o cURL real
curl.exe -X POST https://api.example.com/users `
-H "Content-Type: application/json" `
-d '{\"name\": \"Alice\"}'
Como solucionar timeout?
1. DNS lento? → curl -w verificar time_namelookup
2. Conexão lenta? → curl -w verificar time_connect
3. Processamento do servidor lento? → curl -w verificar time_starttransfer - time_connect
4. Transmissão de resposta lenta? → curl -w verificar time_total - time_starttransfer
Resumo
A depuração de API é parte do dia a dia do desenvolvedor: dominar os comandos cURL, os códigos de status HTTP, os métodos de autenticação e as técnicas de depuração permite localizar rapidamente problemas de interface. A Ferramenta cURL para Código e a Ferramenta de Formatação JSON do ToolsKu são ótimas companheiras para depuração de API, ajudando você a testar interfaces e revisar respostas rapidamente.
#API testing#HTTP requests#cURL#API debugging#tutorial