Sdílet prostřednictvím


Použití uložených procedur s rozhraním Fabric API pro GraphQL

Rozhraní Microsoft Fabric API pro GraphQL usnadňuje dotazování a modifikaci dat z databáze Fabric SQL a dalších zdrojů dat Fabric, jako jsou Data Warehouse a Lakehouse, s striktně typovanými schématy a bohatým dotazovacím jazykem, který umožňuje vývojářům vytvořit intuitivní API bez psaní vlastního kódu serveru. Uložené procedury můžete použít k zapouzdření a opětovnému použití složité obchodní logiky, včetně ověřování vstupu a transformace dat.

V tomto příkladu se naučíme používat uloženou proceduru k registraci nových produktů s logikou na straně serveru pro ověřování, formátování a generování ID, a to vše vystavené prostřednictvím mutace GraphQL ve Fabric.

Začínáme

Začínáme vytvořením databáze SQL ve Fabricu.

  1. V pracovním prostoru Fabric vyberte Nová položka a pak databázi SQL (náhled).
  2. Pojmenujte databázi a pak vyberte Ukázková data a rychle vytvořte všechny požadované tabulky a data v databázi.

Scénář: Registrace nového produktu

Předpokládejme, že chcete vytvořit nový produkt s:

  • Ověřování logiky cen (například. ListPrice > StandardCost)
  • Transformace (například první písmeno názvu produktu velkým písmenem, oříznout a pak použít velká písmena na číslo produktu)
  • Generování ID produktu (zvýšením nejnovějšího ID produktu)

Krok 1: Vytvoření uložené procedury

Tady je uložená procedura T-SQL, která zapouzdřuje veškerou obchodní logiku, kterou potřebujeme. V databázi SQL klikněte na Nový dotaz a použijte následující příkaz:

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;

Kliknutím na Spustit otestujete spuštění. Všimnete si nové uložené procedury RegisterProduct ve složce Uložené procedury v databázi SalesLT . Pomocí následujícího dotazu otestujte logiku procedury:

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

Krok 2: Vytvoření rozhraní GraphQL API

Vytvoření rozhraní API z tabulky SQL je rychlé, snadné a jednoduché. Stačí kliknout na tlačítko Nové rozhraní API pro GraphQL na pásu karet databáze SQL a zadat název rozhraní API.

Dále vyberte tabulky SalesLT ve vaší databázi a uloženou proceduru, kterou jsme právě vytvořili, a pak klikněte na Načíst:

Obrazovka získání dat pro výběr tabulek a procedur v rozhraní API pro GraphQL

Rozhraní GraphQL API, schéma a všechny překladače se automaticky generují v sekundách na základě tabulek SQL a uložených procedur.

Krok 3: Volání procedury z GraphQL

Jakmile je rozhraní API připravené, bude uložená procedura k dispozici jako mutaci ve schématu Fabric GraphQL. Přejděte do editoru dotazů a spusťte následující mutaci:

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
   }
}

Mutace výsledků zobrazená na portálu rozhraní GraphQL API.

Tipy

  • Fabric GraphQL automaticky generuje pole s mutací pro uložené procedury, které vrací sadu výsledků definovanou ve výstupu procedury.
  • Obchodní logika se nachází uvnitř procedury, ne v klientovi.
  • Generování deterministických ID používejte jenom v případě, že nespoléháte na sloupce identit.

Zveřejnění uložených procedur prostřednictvím rozhraní API Fabric vám umožňuje definovat robustní, konzistentní pravidla v SQL pro vaše data a přistupovat k němu čistě přes GraphQL.