Поделиться через


Запрос нескольких источников данных в API Fabric для GraphQL

Одним из ключевых преимуществ API Fabric для GraphQL является возможность предоставления нескольких источников данных, таких как lakehouses, хранилища и базы данных, через одну единую конечную точку API. Это означает, что приложения могут получать данные из разных источников в одном запросе GraphQL, устраняя необходимость подключения к нескольким API или базам данных отдельно.

Например, у вас могут быть данные клиента в одном хранилище и данные инвентаризации в другом лейкхаусе. Вместо двух отдельных вызовов API можно одновременно запрашивать оба источника через API GraphQL, уменьшая нагрузку на сеть и упрощая код приложения.

Как работают запросы с несколькими источниками

При выполнении запроса GraphQL, охватывающего несколько источников данных, API автоматически распределяет отдельные запросы к каждому источнику данных параллельно, а затем объединяет результаты в один ответ. Такой подход:

  • Уменьшает круглые пути: приложение выполняет один запрос вместо нескольких последовательных вызовов
  • Повышение производительности: параллельное выполнение означает более быстрое общее время отклика
  • Упрощает код клиента: вы работаете с одним интерфейсом API независимо от того, где хранятся данные.

Это важно

Запросы с несколькими источниками имеют следующие ограничения:

  • Нельзя создавать связи между типами, охватывающими различные источники данных. Связи работают только в одном источнике данных.
  • Отдельные запросы к каждому источнику данных выполняются параллельно без гарантированного заказа.
  • Каждый запрос к источнику данных является независимым — отсутствует транзакция, охватывающая несколько источников.

Пример запроса

Бизнес-сценарий: представьте, что вы создаете панель мониторинга, которая отображает сведения о клиентах и состоянии инвентаризации продуктов параллельно. Данные клиента находятся в складе продаж (ContosoSales), в то время как инвентаризация продуктов управляется в отдельном озерохранилище (ContosoInventory), которое обновляется системами цепочки поставок. Без поддержки с несколькими источниками необходимо выполнить два отдельных вызова API, управлять двумя разными подключениями и объединять данные в коде приложения.

С помощью API Fabric для GraphQL можно получить данные из обоих источников в одном запросе:

query {
  customers (first: 1) {
    items {
      FirstName
      LastName
    }
  }
  inventories (first: 1) {
    items {
      Name
    }
  }
}

Этот отдельный запрос получает записи клиентов из источника данных ContosoSales и элементов инвентаризации из источника данных ContosoInventory параллельно, объединяя их в один ответ. Панель мониторинга получает все необходимые данные с одним вызовом API вместо двух.

Выходные данные для запроса:

{
  "data": {
    "customers": {
      "items": [
        {
          "FirstName": "Orlando",
          "LastName": "Gee"
        }
      ]
    },
    "inventories": {
      "items": [
        {
          "Name": "AWC Logo Cap"
        }
      ]
    }
  }
}

Структура ответа отражает структуру запроса. data Внутри объекта есть два поля верхнего уровня (customersиinventories) соответствующие двум выполненным запросам. Каждое items поле содержит массив с фактическими результатами. Элементы customers имеют такие свойства, как FirstName и LastName, а элементы inventories имеют свойства, такие как Name — точно как запрошено в запросе.

Вот как выглядит представление запроса при выполнении этого запроса:

Снимок экрана редактора с запросом, охватывающим два источника данных.