Агрегирование данных на API Gateway - PullRequest
2 голосов
/ 10 октября 2019

Я работаю над микросервисной архитектурой и хочу объединить данные из двух микросервисов.

Например, Frontend вызывает API-шлюз, а API-шлюз вызывает два микросервиса: микросервисы Customer и Order. Микросервис клиента возвращает данные клиента, а микросервис заказа возвращает все заказанные продукты клиентом.

Это формат, возвращаемый API-шлюзом после агрегирования из двух микросервисов с использованием Ocelot или Azure API Management.

Формат 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"
            }
         ]
      }
   ]
}

Требуемый формат: формат 2.

Формат 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"
            }
         ]
      }
   ]
}

Второй формат достижим при использовании Ocelot, но объединение данных основано на идентификаторах на шлюзе и требует некоторой обработки.

Это хорошая практика для агрегирования данных на шлюзе с использованием бизнес-логики. Если нет, какие методы следует использовать для такого рода агрегации?

Было бы неплохо, если бы вы могли предоставить некоторые ссылки для достижения этой агрегации с помощью Azure API Management.

1 Ответ

0 голосов
/ 10 октября 2019

Это известно как состав API или Backend для Frontend . Я бы сказал, что можно агрегировать данные с помощью API-шлюза, потому что это позволяет вашим клиентам API использовать более простой интерфейс API. Фактическое сопоставление будет выполнено в шлюзе API.

Однако при объединении нескольких микросервисов в один веб-API сбой одной службы приведет к сбою всего веб-API. Альтернативное (и более сложное) решение заключается в создании выделенного микросервиса, который объединяет наборы данных из других микросервисов и предоставляет единый API, который показывает объединенные данные. Смотрите - CQRS шаблон.

Ссылка на способ реализации этого в Azure: Агрегирование API с помощью управления API Azure .

...