web-dev-qa-db-fra.com

Agrégation des données sur la passerelle API

Je travaille sur l'architecture de Microservice et je souhaite agréger les données de deux microservices.

Par exemple, les appels frontaux L'API Gateway and API Gateway appelle deux microservices de client et commandez des microservices. Le client Microservice renvoie les détails du client et la commande Microservice renvoie tous les produits commandés par le client.

Ceci est le format renvoyé par API Gateway après l'agrégation de deux microservices utilisant la gestion de l'API Ocelot ou Azure.

format 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"
            }
         ]
      }
   ]
}

Le format que je veux est le format 2.

format 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"
            }
         ]
      }
   ]
}

Le deuxième format est réalisable à l'aide de Ocelot, mais la fusion de données est basée sur les ID sur la passerelle et nécessite un certain traitement.

Est-ce une bonne pratique pour agréger les données sur la passerelle à l'aide de la logique commerciale. Sinon, quelles pratiques doivent être suivies pour ce type d'agrégation?

Ce serait bien si vous pouvez fournir des références pour atteindre cette agrégation à l'aide de la gestion de l'API Azure.

8
bippan

Ceci est connu sous le nom de Composition API ou backend pour frontage . Je dirais que cela va bien d'agréger les données à l'aide de la passerelle API car elle permet à vos clients de l'API d'utiliser une interface API plus simple. La cartographie réelle serait faite dans la passerelle API.

Toutefois, lorsque vous enchaînez plusieurs microservices dans une API Web, l'échec d'un service entraînera l'échec de l'intégralité de l'API Web. Une solution alternative (et plus complexe) consiste à créer un microservice dédié qui agrége les jeux de données des autres microservices et expose une API unique indiquant les données jointes. Voir - - [~ # ~] CQRS [~ # ~ ~] motif.

Une référence pour la manière dont vous pourriez implémenter cela dans Azure est agrégation de l'API utilisant la gestion Azure API .

0
Seth