API de Produtos
Construa uma API RESTful para uma loja online. A API é organizada em torno de dois recursos principais: product e order.
flowchart LR
subgraph api [Camada confiável]
gateway --> account
gateway --> auth
account --> db@{ shape: cyl, label: "Banco de dados" }
auth --> account
gateway e5@==> product:::red
gateway e6@==> order
product e2@==> db
order e3@==> db
order e4@==> product
end
internet e1@==>|requisição| gateway
e1@{ animate: true }
e2@{ animate: true }
e3@{ animate: true }
e4@{ animate: true }
e5@{ animate: true }
e6@{ animate: true }
classDef red fill:#fcc
click product "#product-api" "Product API" Atenção
Para consumir a API, o usuário deve estar autenticado.
Product API
A Product API deve expor os seguintes endpoints:
POST /products
Cria um novo produto.
GET /products
Obtém todos os produtos.
GET /products/{id}
Obtém um produto pelo seu ID.
Adicionais
Funcionalidades adicionais são bem-vindas, como:
- Busca de produtos por nome (com "like");
- Autorização por papel (admin, user):
- Admin pode criar, atualizar e excluir produtos;
- User pode apenas criar pedidos;
- Validação de entrada;
- Tratamento de erros.
Desejável
- Observabilidade (métricas, logs), veja Prometheus e Grafana;
- Banco de dados em memória (sugestão: microsserviço Product), veja Redis;
- Documentação Swagger, veja SpringDoc.
Entrega
Individualmente, cada aluno deve criar um repositório no GitHub, com a documentação em MkDocs dos exercícios realizados e também com o projeto e entregar o link via Blackboard. Na documentação publicada deve constar:
- Nome do aluno e grupo;
- Documentação das atividades realizadas;
- Código fonte das atividades realizadas;
- Documentação do projeto;
- Código fonte do projeto;
- Link para todos os repositórios utilizados;
- Destaques para os bottlenecks implementados (ao menos 2 por indivíduo);
- Apresentação do projeto;
- Vídeo de apresentação do projeto (2-3 minutos);
Um template de documentação pode ser encontrado em Template de Documentação.