Delen via


Opgeslagen procedures gebruiken met Fabric-API voor GraphQL

Met De Microsoft Fabric-API voor GraphQL kunt u eenvoudig query's uitvoeren op gegevens uit een Fabric SQL-database en andere Fabric-gegevensbronnen, zoals Data Warehouse en Lakehouse, met sterk getypte schema's en een uitgebreide querytaal, zodat ontwikkelaars een intuïtieve API kunnen maken zonder aangepaste servercode te schrijven. U kunt opgeslagen procedures gebruiken om complexe bedrijfslogica in te kapselen en opnieuw te gebruiken, inclusief invoervalidatie en gegevenstransformatie.

Wie gebruikt opgeslagen procedures met GraphQL

Opgeslagen procedures in GraphQL zijn waardevol voor:

  • Data engineers implementeren gegevensvalidatie, transformatie en verwerking van werkstromen in Fabric SQL-databases
  • Back-end-ontwikkelaars die complexe bedrijfslogica van Fabric-magazijnen beschikbaar maken via moderne GraphQL-API's
  • Toepassingsarchitecten ontwerpen veilige, performante API's die bedrijfsregels in het Fabric-platform inkapselen
  • Databaseontwikkelaars moderniseren bestaande opgeslagen procedures voor Fabric SQL-databases met GraphQL-interfaces

Gebruik opgeslagen procedures wanneer u logica aan de serverzijde nodig hebt voor gegevensvalidatie, complexe berekeningen of databasebewerkingen met meerdere stappen.

In dit artikel wordt gedemonstreerd hoe u een opgeslagen procedure beschikbaar maakt via een GraphQL-mutatie in Fabric. In het voorbeeld wordt een werkstroom voor productregistratie geïmplementeerd met validatie aan de serverzijde, gegevenstransformatie en het genereren van id's, allemaal ingekapseld in een opgeslagen procedure en toegankelijk via GraphQL.

Vereiste voorwaarden

Voordat u begint, hebt u een Fabric SQL-database met voorbeeldgegevens nodig:

  1. Selecteer in uw Fabric-werkruimte Nieuw item>SQL-database (preview)
  2. Geef uw database een naam
  3. Voorbeeldgegevens selecteren om de vereiste tabellen en gegevens te maken

Hiermee maakt u de AdventureWorks-voorbeelddatabase, die de SalesLT.Product tabel bevat die in dit voorbeeld wordt gebruikt.

Scenario: een nieuw product registreren

In dit voorbeeld wordt een opgeslagen procedure gemaakt voor het registreren van nieuwe producten met ingebouwde bedrijfslogica:

  • Validatie: Zorgt ervoor dat ListPrice groter is dan StandardCost
  • Gegevenstransformatie: de productnaam in hoofdletters en normaliseert het productnummer
  • Id-generatie: hiermee wordt automatisch de volgende beschikbare product-id toegewezen

Door deze logica in een opgeslagen procedure in te kapselen, zorgt u voor consistente gegevenskwaliteit, ongeacht welke clienttoepassing de gegevens verzendt.

Stap 1: De opgeslagen procedure maken

Maak een opgeslagen T-SQL-procedure waarmee de productregistratielogica wordt geïmplementeerd:

  1. Selecteer nieuwe query in uw SQL-database

  2. Voer de volgende opdracht uit:

    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;
    
  3. Selecteer Uitvoeren om de opgeslagen procedure te maken

  4. Na het maken ziet u RegisterProduct onder Opgeslagen procedures in het SalesLT-schema . Test de procedure om te controleren of deze correct werkt:

    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
    

Stap 2: Een GraphQL-API maken

Maak nu een GraphQL-API die zowel de tabellen als de opgeslagen procedure beschikbaar maakt:

  1. Selecteer op het lint van de SQL-database de optie Nieuwe API voor GraphQL
  2. Geef uw API een naam
  3. Selecteer in het scherm Gegevens ophalen het SalesLT-schema
  4. Selecteer de tabellen die u wilt weergeven en de opgeslagen procedure RegisterProduct
  5. Laden selecteren

Gegevensscherm ophalen om tabellen en procedures te selecteren in API voor GraphQL.

De GraphQL-API, het schema en alle resolvers worden in seconden automatisch gegenereerd op basis van de SQL-tabellen en opgeslagen procedure.

Stap 3: De procedure aanroepen vanuit GraphQL

Fabric genereert automatisch een GraphQL-mutatie voor de opgeslagen procedure. De mutatienaam volgt het patroon execute{ProcedureName}, dus de RegisterProduct-procedure wordt executeRegisterProduct.

De mutatie testen:

  1. Open de API in de query-editor

  2. Voer de volgende mutatie uit:

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

Mutatie in de GraphQL API-portal waarin de resultaten worden weergegeven.

U ziet hoe de bedrijfslogica van de opgeslagen procedure automatisch de invoer verwerkt:

  • "graphQL swag" wordt "Graphql swag" (met hoofdletter)
  • "gql-swag-001" wordt "GQL-SWAG-001" (hoofdletters)
  • Product-id wordt automatisch gegenereerd als het volgende opeenvolgende getal

Beste praktijken

Wanneer u opgeslagen procedures gebruikt met API voor GraphQL:

  • Resultatensets retourneren: Fabric genereert automatisch mutaties voor opgeslagen procedures die OUTPUT gebruiken of resultatensets retourneren. De geretourneerde kolommen worden het retourtype van de GraphQL-mutatie.
  • Bedrijfslogica inkapselen: validatie, transformatie en complexe berekeningen behouden in de opgeslagen procedure in plaats van in clientcode. Dit zorgt voor consistentie in alle toepassingen.
  • Fouten probleemloos verwerken: gebruik THROW instructies om zinvolle foutberichten te retourneren die kunnen worden weergegeven via de GraphQL-API.
  • Overweeg id-generatie: gebruik alleen logica voor het genereren van aangepaste id's (zoals het verhogen van MAX) als u geen identiteitskolommen gebruikt. Voor productiescenario's zijn identiteitskolommen meestal betrouwbaarder.
  • Documentparameters: Gebruik duidelijke parameternamen die goed vertalen naar GraphQL-veldnamen.

Door opgeslagen procedures beschikbaar te maken via fabric-API voor GraphQL, combineert u de kracht van de procedurele logica van SQL met de flexibele queryinterface van GraphQL, waardoor robuuste en onderhoudbare patronen voor gegevenstoegang worden gemaakt.