1 / 12
Modulo 7 / APIs REST

Conceitos REST

Princípios REST, métodos HTTP e status codes.

school Aula 31 schedule 2 horas

Fundamentos

O que é uma API?

hub Application Programming Interface

  • Interface de comunicação entre sistemas
  • Permite que o front-end converse com o back-end
  • Envia e recebe dados (geralmente JSON)
  • Independe da tecnologia (React, Vue, mobile…)

account_tree Analogia do restaurante

Cliente → Front-end (quem pede)
Garçom → API (leva o pedido)
Cozinha → Back-end (processa)
Prato → Resposta/dados (JSON)

Arquitetura

O que é REST?

architecture Representational State Transfer

  • Estilo arquitetural para APIs web
  • Criado por Roy Fielding em 2000
  • Baseado no protocolo HTTP
  • Padrão mais usado na web moderna

checklist Princípios REST

Stateless — Cada request contém tudo que o servidor precisa
Client-Server — Front e back separados
Uniform Interface — URLs previsíveis e padronizadas
Cacheable — Respostas podem ser cacheadas
Layered System — Camadas intermediárias transparentes

Endpoints

Recursos e URLs

link Boas práticas de URLs

/usuarios plural, substantivo
/usuarios/42 recurso específico
/usuarios/42/posts sub-recurso
/getUsuarios verbo na URL
/usuario singular
/deletar-usuario/42 ação na URL

api A ação vem do método HTTP

GET /produtos Listar
GET /produtos/7 Detalhe
POST /produtos Criar
PUT /produtos/7 Substituir
PATCH /produtos/7 Atualizar parcial
DELETE /produtos/7 Remover

HTTP Methods

Métodos HTTP em detalhe

GET

Busca dados. Não altera nada no servidor.

  • ▸ Idempotente (mesmo resultado várias vezes)
  • ▸ Pode ser cacheado
  • ▸ Sem body na requisição

POST

Cria um novo recurso no servidor.

  • ▸ NÃO idempotente (cada chamada cria novo)
  • ▸ Envia dados no body (JSON)
  • ▸ Retorna 201 Created

PUT / PATCH

Atualiza um recurso existente.

  • ▸ PUT: substitui o recurso inteiro
  • ▸ PATCH: atualiza parcialmente
  • ▸ Idempotente

DELETE

Remove um recurso. Idempotente — deletar duas vezes tem o mesmo efeito.

HEAD / OPTIONS

HEAD: como GET mas só retorna headers. OPTIONS: retorna métodos permitidos (usado em CORS).

Status Codes

Códigos de status

check_circle 2XX — Sucesso

200 OK Requisição bem-sucedida (GET, PUT, PATCH)
201 Created Recurso criado com sucesso (POST)
204 No Content Sucesso sem body na resposta (DELETE)

error 4XX — Erro do cliente

400 Bad Request Dados inválidos ou faltando
401 Unauthorized Não autenticado (falta token)
403 Forbidden Autenticado mas sem permissão
404 Not Found Recurso não encontrado
422 Unprocessable Entity Dados válidos sintaticamente, mas semanticamente incorretos

Status Codes

5XX e resumo

report 5XX — Erro do servidor

500 Internal Server Error Erro inesperado no servidor
502 Bad Gateway Servidor intermediário recebeu resposta inválida
503 Service Unavailable Servidor indisponível (manutenção, sobrecarga)

view_list Resumo geral

1XX Informativo (processando)
2XX Sucesso ✓
3XX Redirecionamento
4XX Erro do cliente
5XX Erro do servidor

HTTP

Headers e Content-Type

mail Headers de requisição

// Headers comuns na requisição Content-Type: application/json Authorization: Bearer eyJhbG... Accept: application/json Origin: https://meusite.com

reply Headers de resposta

// Headers comuns na resposta Content-Type: application/json Cache-Control: no-cache Access-Control-Allow-Origin: * X-RateLimit-Remaining: 95

Content-Types mais usados:

application/json APIs REST text/html páginas web multipart/form-data upload de arquivos application/x-www-form-urlencoded formulários

Exemplo

Request e Response

upload Request (POST)

POST /api/produtos HTTP/1.1 Host: api.exemplo.com Content-Type: application/json Authorization: Bearer eyJhbG... { "nome": "Notebook", "preco": 2999.90, "categoria": "Eletrônicos" }

download Response (201)

HTTP/1.1 201 Created Content-Type: application/json { "_id": "64f1a2b3c4d5...", "nome": "Notebook", "preco": 2999.90, "categoria": "Eletrônicos", "createdAt": "2025-01-15..." }

Comparação

REST vs alternativas

REST ⭐

  • Simples e intuitivo
  • Usa HTTP puro
  • Cacheable
  • Amplamente adotado

GraphQL

  • Query language (Facebook)
  • Um endpoint só
  • Cliente pede exatamente o que quer
  • Mais complexo

WebSocket

  • Comunicação em tempo real
  • Bidirecional
  • Ideal para chats, games
  • Não substitui REST

Hora de praticar

Exercício prático

api Explorando APIs públicas

  1. Abra o Thunder Client e teste a API https://jsonplaceholder.typicode.com
  2. Faça um GET em /posts e identifique o status code e headers
  3. Faça um GET em /posts/1 e observe a diferença
  4. Faça um POST em /posts enviando JSON no body
  5. Teste um GET em /posts/99999 — qual o status?
  6. Projete os endpoints de uma API de uma loja (produtos, categorias, pedidos)
lightbulb Desafio extra: teste a API do ViaCEP (viacep.com.br/ws/01001000/json/) e identifique método, status e formato.
Próxima aula

Aula 32

Criando uma API RESTful completa.

task_alt O que aprendemos hoje

  • check_circle O que é uma API e o padrão REST
  • check_circle Princípios REST (stateless, uniform interface…)
  • check_circle Métodos HTTP: GET, POST, PUT, PATCH, DELETE
  • check_circle Status codes (2XX, 4XX, 5XX)
  • check_circle Headers, Content-Type e REST vs alternativas
Próxima aula
auto_stories Referência: MDN HTTP
Leandro Medeiros