AULA 34 MÓDULO 4 APIs REST ⏱ 50 min

O que é uma API

APIs como contratos de comunicação. REST, GraphQL, gRPC, WebSocket. As 6 constraints REST de Roy Fielding.

APIRESTGraphQLgRPCWebSocketstatelesscontrato

O que é uma API

API (Application Programming Interface) é um contrato que define como sistemas se comunicam. Na web, quando falamos de API, geralmente falamos de HTTP API — endpoints que aceitam requisições e retornam dados.

🔌
analogia — tomada elétrica
A tomada é uma API. Não importa se o plugue é de um celular, notebook ou geladeira — todos seguem o contrato (voltagem, pinos). A API funciona igual: não importa se quem chama é React, iOS ou outro servidor.
REST API
Padrão HTTP mais usado. Recursos, verbos, JSON. Stateless. Aprenderemos neste módulo.
GraphQL
Uma query language para APIs. Cliente define exatamente os dados que quer. Menos over/under-fetching.
gRPC
Protocol Buffers + HTTP/2. Ultra performático. Usado entre microsserviços.
WebSocket
Conexão bidirecional persistente. Tempo real: chat, notificações, jogos.

REST — 6 constraints

REST não é um padrão formal, mas um estilo arquitetural com 6 restrições definidas por Roy Fielding em 2000. Seguir essas constraints produz APIs interoperáveis e escaláveis.

Client-Server
Separação clara entre UI e dados
Stateless
Cada requisição contém todo o contexto necessário — sem sessão no servidor
Cacheable
Respostas podem ser cacheadas pelo cliente ou intermediários
Uniform Interface
URLs consistentes, verbos semânticos, representação padrão (JSON)
Layered System
Cliente não sabe se fala com servidor, proxy ou load balancer
Code on Demand
Opcional: servidor pode enviar código executável (ex: JavaScript)
javascript
// API de comparação: REST vs GraphQL para o mesmo dado

// REST — pode trazer campos desnecessários (over-fetching)
// GET /users/42
// Retorna TUDO: id, name, email, address, phone, createdAt...
// Você queria só name e email

// GraphQL — você pede só o que precisa
// query { user(id: 42) { name email } }
// Retorna: { user: { name: "Ana", email: "ana@ex.com" } }

// REST bem modelado com campos selecionáveis (mitigação)
// GET /users/42?fields=name,email
app.get('/users/:id', async (req, res) => {
  const { fields } = req.query
  const user = await userRepo.findById(req.params.id)
  if (!user) return res.status(404).json({ error: 'Not found' })
  if (fields) {
    const allowed = fields.split(',')
    const partial = Object.fromEntries(
      Object.entries(user).filter(([k]) => allowed.includes(k))
    )
    return res.json(partial)
  }
  res.json(user)
})
quiz · aula 34
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
O que significa 'Stateless' em REST?
QUESTÃO 02
Qual é a principal diferença entre REST e GraphQL?
QUESTÃO 03
gRPC é mais usado em qual cenário?
0/3