Curso Básico de APIs

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"
}

O que é uma API?

Interface de Programação de Aplicações

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).

Por que as APIs são importantes?

  • Reutilização de Código: Desenvolvedores podem usar funcionalidades existentes sem recriá-las
  • Integração Simplificada: Sistemas diferentes podem conversar de forma padronizada
  • Inovação: Facilitam a criação de novos produtos combinando funcionalidades
  • Eficiência: Agilizam o desenvolvimento e manutenção de software
// Exemplo de requisição API
fetch('https://api.exemplo.com/usuarios')
  .then(response => response.json())
  .then(data => console.log(data));

Métodos HTTP

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.

GET

Buscar Dados

Solicita dados de um recurso específico. É seguro e idempotente.

GET /api/usuarios/123
POST

Criar Dados

Envia dados para criar um novo recurso no servidor.

POST /api/usuarios
{
  "nome": "João",
  "email": "joao@email.com"
}
PUT

Atualizar Completamente

Substitui completamente um recurso existente.

PUT /api/usuarios/123
{
  "nome": "João Silva",
  "email": "joao.silva@email.com"
}
PATCH

Atualizar Parcialmente

Aplica modificações parciais a um recurso.

PATCH /api/usuarios/123
{
  "email": "novo@email.com"
}
DELETE

Remover Dados

Remove um recurso específico do servidor.

DELETE /api/usuarios/123

Headers HTTP

Metadados da Comunicação

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.

Headers Comuns de Requisição

Content-Type: application/json
Accept: application/json
Authorization: Bearer token123
User-Agent: MeuApp/1.0
  • Content-Type: Formato dos dados enviados
  • Accept: Formato preferido da resposta
  • Authorization: Credenciais de autenticação
  • User-Agent: Identificação do cliente

Headers Comuns de Resposta

Content-Type: application/json
Content-Length: 1234
Cache-Control: no-cache
Server: nginx/1.18
  • Content-Type: Formato dos dados retornados
  • Content-Length: Tamanho da resposta
  • Cache-Control: Diretivas de cache
  • Server: Informações do servidor

Parâmetros em APIs

Personalizando Requisições

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.

Query Parameters

Anexados ao final da URL após um "?"

GET /api/produtos?
categoria=eletronicos&
ordenar_por=preco&
limite=10
Usado para filtros, ordenação e paginação

Path Parameters

Incorporados na estrutura da URL

GET /api/usuarios/123
PUT /api/produtos/camiseta-azul
Usado para identificar recursos específicos

Request Body

Dados enviados no corpo da requisição

{
  "nome": "Ana",
  "email": "ana@email.com",
  "idade": 30
}
Usado para dados complexos ou grandes volumes

Response & Status Codes

Entendendo as Respostas

Após processar uma requisição, o servidor envia uma resposta contendo dados solicitados e informações sobre o resultado da operação.

Códigos de Status HTTP

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

Exemplo de Resposta

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"
}

Autenticação em APIs

Protegendo o Acesso

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.

API Key

Token único que identifica o projeto ou aplicação

GET /api/dados
X-API-Key: sua_chave_aqui
✅ Simples de implementar
❌ Menos segura

Bearer Token

Token de acesso obtido após autenticação

GET /api/perfil
Authorization: Bearer eyJhbGc...
✅ Mais seguro
✅ Tempo de vida limitado

Basic Auth

Usuário e senha codificados em Base64

GET /api/recursos
Authorization: Basic dXN1YXJpbz...
✅ Amplamente suportado
❌ Apenas codificado

OAuth 2.0

Framework de autorização para acesso delegado

// Fluxo OAuth
1. Autorização
2. Troca por token
3. Uso do token
✅ Muito seguro
❌ Mais complexo

Formatos de Dados

JSON

JavaScript Object Notation - formato leve e fácil de ler

{
  "nome": "Alice",
  "idade": 30,
  "cidade": "São Paulo",
  "interesses": ["leitura", "viagem"],
  "ativo": true
}
  • ✅ Leve e compacto
  • ✅ Fácil de ler
  • ✅ Integração nativa com JavaScript
  • ✅ Amplamente adotado

XML

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>
  • ✅ Extensível
  • ✅ Validação de esquema
  • ❌ Mais verboso
  • ❌ Menos popular em APIs REST

Endpoints e URLs

Onde as APIs Residem

Para interagir com uma API, você precisa saber onde ela "mora" na internet. É aí que entram os conceitos de URL e Endpoint.

Estrutura de uma URL de API

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)

Exemplos de Endpoints

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

Gerenciando o Uso da API

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.

Por que é importante?

  • Prevenção de Abuso: Impede sobrecarga do servidor
  • Qualidade de Serviço: Garante disponibilidade para todos
  • Controle de Custos: Gerencia recursos computacionais
  • Políticas de Uso: Aplica limites por plano de assinatura

Headers de Rate Limiting

HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1678886400

{
  "data": "..."
}

Resposta quando limite é excedido

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"
}

Webhooks

APIs Reativas e Notificações em Tempo Real

Enquanto APIs tradicionais funcionam com requisição-resposta, Webhooks operam de forma inversa: o servidor "empurra" dados para o cliente quando algo acontece.

API Tradicional (Polling)

// 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
❌ Ineficiente
❌ Não é tempo real

Webhook

// 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"]
}
✅ Eficiente
✅ Tempo real

Como Funcionam os Webhooks

  1. Registro: Você registra uma URL de callback
  2. Evento: Algo acontece no sistema monitorado
  3. Notificação: O sistema envia dados para sua URL
  4. Processamento: Sua aplicação processa os dados

Casos de Uso

  • Notificações de pagamento processado
  • Sincronização de dados entre sistemas
  • Automação de fluxos de trabalho
  • Atualizações de status em tempo real