Aula 05 - Implementação de APIs (Controllers e Rotas) ⚙️
Objetivo
Objetivo: Entender a camada de entrada de uma aplicação backend, aprender a mapear rotas para funções específicas e capturar parâmetros de entrada enviados pelo cliente.
1. A Camada de Controller 🎮
O Controller é o "maestro" de uma rota. Sua única responsabilidade é: 1. Receber a requisição HTTP. 2. Validar se os dados básicos estão ali. 3. Chamar a lógica de negócio (que veremos na próxima aula). 4. Retornar a resposta correta (Status Code + JSON).
Analogia: O Controller é o garçom de um restaurante. Ele anota o pedido, leva para a cozinha e traz o prato pronto. Ele não cozinha!
🗺️ O Papel do Controller (Mermaid)
graph LR
User([Usuário]) -- Request --> C[Controller]
C -- "Call Service (Cozinha)" --> S[Service]
S -- "Data (Prato)" --> C
C -- "JSON Response" --> User
2. Anatomia de uma Rota 📍
Uma rota no backend é composta por:
* Endpoint (Path): O caminho (ex: /produtos).
* Verbo: A ação (ex: POST).
* Handler: A função que será executada quando a rota for chamada.
Exemplo (Conceitual):
// Quando receber um GET em /usuarios, execute a função listarUuarios
router.get('/usuarios', (req, res) => {
const lista = [{ id: 1, nome: 'Ricardo' }];
return res.status(200).json(lista);
});
3. Capturando Dados do Cliente 📥
Existem três formas principais de o cliente enviar dados:
| Tipo | Onde fica? | Exemplo | Uso Comum |
|---|---|---|---|
| Path Params | Na URL (como parte do caminho) | /usuarios/123 |
Identificar um recurso específico. |
| Query Params | Na URL (após o ?) |
/produtos?categoria=games |
Filtros, ordenação e paginação. |
| Request Body | No "corpo" da mensagem | { "nome": "Novo Item" } |
Criação ou atualização (POST/PUT). |
4. O Objeto de Resposta (Response) 📤
Não basta retornar os dados, precisamos seguir o contrato REST.
O Controller deve garantir:
* Status Code Errado: Jamais retorne 200 OK se ocorreu um erro.
* Corpo Padronizado: Envie as mensagens de erro dentro de um JSON para facilitar o trabalho do frontend.
5. Injeção de Dependência (Introdutório) 💉
Para que o Controller não tenha que "criar" outras classes, ele as recebe prontas. Isso facilita testes e troca de tecnologias.
6. Mini-Projeto: Dashboard de Usuários 👥
- Crie uma rota
GET /usuarios. - Crie uma rota
POST /usuarios. - Crie uma rota
DELETE /usuarios/:id. - Use o Postman para testar se os dados estão sendo recebidos e enviados corretamente.
Testando com cURL (Terminal)
curl -X POST http://localhost:3000/usuarios -d '{"nome": "Ana"}'{"status": "Criado"}
7. Exercício de Fixação 🧠
- Por que o Controller não deve conter regras de negócio (ex: cálculo de desconto)?
- Qual a diferença prática entre usar um Query Param e um Path Param?
- O que acontece se um Controller tentar acessar
req.bodymas o cliente não enviou o headerContent-Type: application/json?
Próxima Aula: Vamos tirar a lógica do Controller e levar para o lugar certo: Services e Regras de Negócio 🧠