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