API de Pedidos
Com a API de produtos pronta, o próximo passo é implementar a API de pedidos. Os pedidos estão vinculados a usuários autenticados e fazem referência a produtos existentes.
flowchart LR
subgraph api [Camada confiável]
gateway --> account
gateway --> auth
account --> db@{ shape: cyl, label: "Banco de dados" }
auth --> account
gateway e5@==> product
gateway e6@==> order:::red
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 order "#order-api" "API de pedidos" Atenção
Para consumir a API, o usuário precisa estar autenticado.
API de pedidos
POST /orders
Cria um novo pedido para o usuário atual.
GET /orders
Obtém todos os pedidos do usuário atual.
GET /orders/{id}
Obtém os detalhes de um pedido pelo seu ID. O pedido deve pertencer ao usuário atual; caso contrário, retorne um 404.
Um parâmetro de query opcional, currency, permite que os totais sejam retornados em outra moeda. Quando omitido, os valores são retornados em USD (a moeda em que estão armazenados no banco de dados).
Moeda de armazenamento
Todos os valores monetários são armazenados no banco de dados em dólares americanos (USD). Quando o parâmetro currency for informado, o serviço deve chamar a API de câmbio (Exchange API) para converter os totais antes de retornar a resposta.
Openfeign
Se você estiver usando Spring Boot, pode aproveitar o OpenFeign para criar um cliente REST declarativo para a API de câmbio. Assim, você integra facilmente a lógica de conversão de moedas à sua API de pedidos, sem tratar manualmente as requisições e respostas HTTP.
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 das entradas;
- Tratamento de erros.
Desejável
- Observabilidade (métricas, logs), veja Prometheus e Grafana;
- Banco de dados em memória (sugestão: microsserviço de produtos), veja Redis;
- Documentação Swagger, veja SpringDoc.