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).
Analogie: 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!
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.
7. Mini-Projeto: Criando seu primeiro Controller ⌨️
Imagine que você está criando o Controller de um Carrinho de Compras.
- Defina a rota para adicionar um item (POST).
- Como você capturaria o
iddo produto vindo no Body? - Crie a rota para remover um item específico (DELETE via Path Param).
- Qual o Status Code ideal se o usuário tentar remover um item que não está no carrinho?
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 🧠