Integração com GrocersCore
Visão Geral
O sistema de integração se comunica com o GrocersCore (monolito principal) através de endpoints REST específicos. Esta comunicação é assíncrona, utilizando Azure Service Bus para processamento em background.
Arquitetura
sequenceDiagram
participant Client
participant Integration
participant ServiceBus
participant Background
participant GrocersCore
Client->>Integration: POST /batch/{entity}
Integration->>ServiceBus: Envia mensagem
Integration->>Client: 200 OK (operationId)
ServiceBus->>Background: Processa mensagem
Background->>GrocersCore: Envia para endpoint específico
GrocersCore->>Background: Resposta
Background->>ServiceBus: Envia notificação
ServiceBus->>Client: Webhook notification
Endpoints do GrocersCore
Todos os endpoints são prefixados com a URL base configurada em AppSettings:ExternalEndpoint:MonoService:BaseUrl.
Produtos
- POST
/v1/products/integration: Criar produtos - PUT
/v1/products/integration: Atualizar produtos - DELETE
/v1/products/integration: Deletar produtos
Categorias
- POST
/v1/categories/integration: Criar categorias - DELETE
/v1/categories/integration: Deletar categorias
Marcas
- POST
/v1/brands/integration: Criar marcas - DELETE
/v1/brands/integration: Deletar marcas
SKUs
- POST
/v1/skus/integration: Criar SKUs - PUT
/v1/skus/integration: Atualizar SKUs - DELETE
/v1/skus/integration: Deletar SKUs
Armazéns
- POST
/v1/warehouses/integration: Criar armazéns - PUT
/v1/warehouses/integration: Atualizar armazéns - DELETE
/v1/warehouses/integration: Deletar armazéns
SKUs em Armazéns
- POST
/v1/gateway/warehouses/sku/integration: Criar relação SKU-armazém - PUT
/v1/gateway/warehouses/sku/integration: Atualizar relação SKU-armazém - DELETE
/v1/gateway/warehouses/sku/integration: Deletar relação SKU-armazém
Preços
- POST
/v1/gateway/pricing/integration: Criar preços - DELETE
/v1/gateway/pricing/integration: Deletar preços
Pedidos
- POST
/v1/gateway/orders/integration: Atualizar pedidos
Autenticação
A comunicação com o GrocersCore requer:
- Header de Conta
x-contractAccountId: ID da conta do contrato- Exemplo:
x-contractAccountId: 9f36a666-acd5-4987-a47f-3de247f65d82
Processamento de Erros
O sistema implementa uma estratégia robusta de tratamento de erros:
-
Erros 4xx
- Considerados erros de negócio
- Mensagem marcada como processada
- Erro enviado via webhook
-
Erros 5xx
- Considerados erros de infraestrutura
- Mensagem retorna para a fila
- Retry automático
Exemplo de Notificação de Erro
{
"operationId": "54d6a979-5f62-4e17-9d4c-dbd9f5ede403",
"relatedEntity": "Product",
"eventType": 1,
"data": {
"externalReference": "123",
"name": "Produto Teste"
},
"error": {
"statusCode": 400,
"message": "Product with external reference 123 already exists"
},
"contractAccountId": "9f36a666-acd5-4987-a47f-3de247f65d82"
}
Boas Práticas
-
Monitoramento
- Implementar health checks
- Monitorar tempos de resposta
- Acompanhar taxa de erros
-
Resiliência
- Implementar circuit breaker
- Configurar timeouts adequados
- Tratar erros específicos
-
Performance
- Limitar tamanho dos payloads
- Monitorar uso de recursos
- Otimizar número de conexões
-
Segurança
- Validar todos os inputs
- Usar HTTPS
- Implementar rate limiting