Agregação de dados na 'Gateway' da API

Estou a trabalhar na arquitectura dos microsserviços e quero agregar dados de dois microsserviços.

por exemplo, o Frontend chama o API Gateway e o API Gateway chama dois microservices clientes e encomendam microservices. O cliente microservice devolve os detalhes do cliente e ordena o microservice devolve todos os produtos encomendados pelo cliente.

Este é o formato devolvido pela 'Gateway' da API após agregação de dois microservice usando a gestão da API Ocelot ou Azure.

Formato 1

{ 
   "Customers":[ 
      { 
         "customerId":1001,
         "customerName":"Tom"
      },
      { 
         "customerId":1002,
         "customerName":"Jerry"
      }
   ],
   "Orders":[ 
      { 
         "CustomerId":1001,
         "Orders":[ 
            { 
               "ProductId":"PRO1",
               "ProductName":"Books"
            },
            { 
               "ProductId":"PRO2",
               "ProductName":"Pens"
            }
         ]
      },
      { 
         "CustomerId":1002,
         "Orders":[ 
            { 
               "ProductId":"PRO3",
               "ProductName":"Pencils"
            },
            { 
               "ProductId":"PRO4",
               "ProductName":"Toys"
            }
         ]
      }
   ]
}

o formato que eu quero é o formato 2.

Formato 2

{
   "OrderDetails":[
      {
         "customerId":1001,
         "customerName":"Tom",
         "Orders":[
            {
               "ProductId":"PRO1",
               "ProductName":"Books"
            },
            {
               "ProductId":"PRO2",
               "ProductName":"Pens"
            }
         ]
      },
      {
         "customerId":1002,
         "customerName":"Jerry",
         "Orders":[
            {
               "ProductId":"PRO3",
               "ProductName":"Pencils"
            },
            {
               "ProductId":"PRO4",
               "ProductName":"Toys"
            }
         ]
      }
   ]
}

o segundo formato é possível usando Ocelot, mas a junção de dados é baseada no ids no Gateway e requer algum processamento.

É uma boa prática agregar dados sobre Gateway utilizando a lógica empresarial. Em caso negativo, que práticas devem ser seguidas para este tipo de agregação?

seria bom se pudesse fornecer algumas referências para alcançar esta agregação utilizando a gestão da API Azure.

Author: bippan, 2019-10-10

1 answers

Isto é conhecido como API Composição ou infra-estrutura para Frontend . Eu diria que é bom agregar dados usando o Gateway API porque permite que seus clientes API usem uma interface API mais simples. O mapeamento real seria feito no Gateway API.

No entanto, quando você acorrentar vários microservices juntos em uma API Web, a falha de um serviço fará com que toda a API Web falhe. Uma solução alternativa (e mais complexa) é criar um microservice que agrega os conjuntos de dados dos outros microservices e expõe uma única API que mostra os dados Unidos. See - CQRS pattern.

Uma referência para como você pode implementar isso em Azure é API agregação usando Azure API Management .

 5
Author: Seth, 2019-10-10 09:01:05