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


Использование хранимых процедур с API Fabric для GraphQL

API Microsoft Fabric для GraphQL позволяет легко запрашивать и изменять данные из базы данных SQL Fabric и других источников данных Fabric, таких как хранилище данных и Lakehouse, с строго типизированными схемами и расширенным языком запросов, что позволяет разработчикам создавать интуитивно понятный API без написания пользовательского кода сервера. Хранимые процедуры можно использовать для инкапсулации и повторного использования сложной бизнес-логики, включая преобразование входных данных и проверки данных.

В этом примере мы узнаем, как использовать хранимую процедуру для регистрации новых продуктов с помощью логики на стороне сервера для проверки, форматирования и создания идентификаторов, доступных через мутацию GraphQL в Fabric.

Начало работы

Мы приступим к созданию базы данных SQL в Fabric:

  1. В рабочей области Fabric выберите новый элемент , а затем базу данных SQL (предварительная версия).
  2. Присвойте базе данных имя, а затем выберите пример данных , чтобы быстро создать все необходимые таблицы и данные в базе данных.

Сценарий: регистрация нового продукта

Предположим, вы хотите создать новый продукт с помощью:

  • Проверка логики ценообразования (например, ListPrice > StandardCost)
  • Преобразование (например, первая буква названия продукта с заглавной, обрезать, а затем перевести номер продукта в верхний регистр).
  • Генерация ProductID (путем инкрементирования последнего ProductID)

Шаг 1. Создание хранимой процедуры

Ниже приведена хранимая процедура T-SQL, которая инкапсулирует всю необходимую бизнес-логику. В базе данных SQL щелкните новый запрос и используйте следующую инструкцию:

CREATE PROCEDURE SalesLT.RegisterProduct
  @Name nvarchar(50),
  @ProductNumber nvarchar(25),
  @StandardCost money,
  @ListPrice money,
  @SellStartDate datetime
AS
BEGIN
  SET NOCOUNT ON;
  SET IDENTITY\_INSERT SalesLT.Product ON;

  -- Validate pricing logic
  IF @ListPrice <= @StandardCost
    THROW 50005, 'ListPrice must be greater than StandardCost.', 1;

-- Transform product name: capitalize first letter only
  DECLARE @CleanName nvarchar(50);
  SET @CleanName = UPPER(LEFT(LTRIM(RTRIM(@Name)), 1)) + LOWER(SUBSTRING(LTRIM(RTRIM(@Name)), 2, 49));

  -- Trim and uppercase product number
  DECLARE @CleanProductNumber nvarchar(25);
  SET @CleanProductNumber = UPPER(LTRIM(RTRIM(@ProductNumber)));

  -- Generate ProductID by incrementing the latest existing ID
  DECLARE @ProductID int;
  SELECT @ProductID = ISNULL(MAX(ProductID), 0) + 1 FROM SalesLT.Product;

  INSERT INTO SalesLT.Product (
    ProductID,
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
  )
  OUTPUT 
    inserted.ProductID,
    inserted.Name,
    inserted.ProductNumber,
    inserted.StandardCost,
    inserted.ListPrice,
    inserted.SellStartDate
  VALUES (
    @ProductID,
    @CleanName,
    @CleanProductNumber,
    @StandardCost,
    @ListPrice,
    @SellStartDate
  );
END;

Нажмите кнопку "Выполнить" , чтобы проверить выполнение. Вы заметите новую хранимую процедуру RegisterProduct в папке хранимых процедур в базе данных SalesLT . Используйте следующий запрос для проверки логики процедуры:

DECLARE @RC int
DECLARE @Name nvarchar(50)
DECLARE @ProductNumber nvarchar(25)
DECLARE @StandardCost money
DECLARE @ListPrice money
DECLARE @SellStartDate datetime

-- TODO: Set parameter values here.
Set @Name = 'test product'       
Set @ProductNumber = 'tst-0012'
Set @StandardCost = '10.00'
Set @ListPrice = '9.00'
Set @SellStartDate = '2025-05-01T00:00:00Z'

EXECUTE @RC = \[SalesLT\].\[RegisterProduct\] 
   @Name
  ,@ProductNumber
  ,@StandardCost
  ,@ListPrice
  ,@SellStartDate
GO

Шаг 2. Создание API GraphQL

Создание API из таблицы SQL выполняется быстро, легко и просто. Вам просто нужно нажать кнопку "Создать API для GraphQL" на ленте базы данных SQL и указать имя API.

Затем выберите таблицы SalesLT в базе данных и хранимую процедуру, которую мы только что создали, а затем нажмите кнопку "Загрузить".

Получите экран данных для выбора таблиц и процедур в API для GraphQL.

API GraphQL, схема и все сопоставители автоматически создаются в секундах на основе таблиц SQL и хранимой процедуры.

Шаг 3. Вызов процедуры из GraphQL

После готовности API хранимая процедура становится доступной в виде изменения в схеме GraphQL Fabric. Перейдите в редактор запросов и выполните следующую мутацию:

mutation {
   executeRegisterProduct (
    Name: " graphQL swag ",
    ProductNumber: "gql-swag-001",
    StandardCost: 10.0,
    ListPrice: 15.0,
    SellStartDate: "2025-05-01T00:00:00Z"
  ) {
ProductID
    Name
    ProductNumber
    StandardCost
    ListPrice
    SellStartDate
   }
}

Изменение на портале API GraphQL, отображающее результаты.

Советы

  • GraphQL Fabric автоматически создает поля мутаций для хранимых процедур, возвращающих результирующий набор, определенный в выходных данных процедуры.
  • Бизнес-логика находится внутри процедуры, а не клиента.
  • Используйте детерминированное поколение идентификаторов, только если вы не используете столбцы идентификаторов.

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