次の方法で共有


GraphQL 用 Fabric API でストアド プロシージャを使用する

Microsoft Fabric API for GraphQL を使用すると、厳密に型指定されたスキーマと豊富なクエリ言語を使用して、Fabric SQL データベースやその他の Fabric データ ソース (Data Warehouse や Lakehouse など) からデータのクエリと変更を簡単に行えるようになり、開発者はカスタム サーバー コードを記述せずに直感的な API を作成できます。 ストアド プロシージャを使用すると、入力の検証やデータ変換など、複雑なビジネス ロジックをカプセル化して再利用できます。

GraphQL でストアド プロシージャを使用するユーザー

GraphQL のストアド プロシージャは、次の場合に重要です。

  • Fabric SQL データベースでデータ検証、変換、および処理ワークフローを実装するデータ エンジニア
  • 最新の GraphQL API を使用して Fabric ウェアハウスから複雑なビジネス ロジックを公開するバックエンド開発者
  • Fabric プラットフォーム内のビジネス ルールをカプセル化する、セキュリティで保護されたパフォーマンスの高い API を設計するアプリケーション アーキテクト
  • GraphQL インターフェイスを使用して既存の Fabric SQL データベース ストアド プロシージャを最新化するデータベース開発者

データの検証、複雑な計算、または複数ステップのデータベース操作にサーバー側ロジックが必要な場合は、ストアド プロシージャを使用します。

この記事では、Fabric で GraphQL の変更を通じてストアド プロシージャを公開する方法について説明します。 この例では、サーバー側の検証、データ変換、ID 生成を含む製品登録ワークフローを実装します。すべてストアド プロシージャにカプセル化され、GraphQL を介してアクセスできます。

[前提条件]

開始する前に、サンプル データを含む Fabric SQL データベースが必要です。

  1. Fabric ワークスペースで、新しい項目>SQL データベース (プレビュー) を選択します
  2. データベースに名前を付ける
  3. [ サンプル データ ] を選択して、必要なテーブルとデータを作成します

これにより、AdventureWorks サンプル データベースが作成されます。このデータベースには、この例で使用されている SalesLT.Product テーブルが含まれます。

シナリオ: 新しい製品を登録する

この例では、組み込みのビジネス ロジックを使用して新しい製品を登録するためのストアド プロシージャを作成します。

  • 検証: ListPrice が StandardCost より大きいことを確認します
  • データ変換: 製品名を大文字にし、製品番号を正規化します
  • ID 生成: 利用可能な次の ProductID を自動的に割り当てます

このロジックをストアド プロシージャにカプセル化することで、どのクライアント アプリケーションがデータを送信するかに関係なく、一貫したデータ品質を確保できます。

手順 1: ストアド プロシージャを作成する

製品登録ロジックを実装する T-SQL ストアド プロシージャを作成します。

  1. SQL データベースで、[新しいクエリ] を選択します

  2. 次のステートメントを実行します。

    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. [ 実行 ] を選択してストアド プロシージャを作成する

  4. 作成後、SalesLT スキーマのストアド プロシージャの下に RegisterProduct が表示されます。 手順をテストして、正しく動作することを確認します。

    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: GraphQL API を作成する

次に、テーブルとストアド プロシージャの両方を公開する GraphQL API を作成します。

  1. SQL データベースリボンで、GraphQL 用の新しい API を選択します
  2. API に名前を付ける
  3. [ データの取得 ] 画面で、 SalesLT スキーマを選択します
  4. 公開するテーブルと RegisterProduct ストアド プロシージャを選択します
  5. [読み込み] を選択

GraphQL 用 API でテーブルとプロシージャを選択するためのデータ画面を取得します。

GraphQL API、スキーマ、およびすべてのリゾルバーは、SQL テーブルとストアド プロシージャに基づいて数秒で自動的に生成されます。

手順 3: GraphQL からプロシージャを呼び出す

Fabric では、ストアド プロシージャの GraphQL の変更が自動的に生成されます。 変異名はパターン execute{ProcedureName}に従うので、RegisterProduct プロシージャは executeRegisterProductになります。

変異をテストするには:

  1. クエリ エディターで API を開く

  2. 次の変更を実行します。

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

結果を表示する GraphQL API ポータルの変更。

ストアド プロシージャのビジネス ロジックが入力を自動的に処理する方法に注目してください。

  • "graphQL swag""Graphql swag" になります (大文字)
  • "gql-swag-001""GQL-SWAG-001" になります (大文字)
  • ProductID は、次の順次番号として自動的に生成されます

ベスト プラクティス

GraphQL 用 API でストアド プロシージャを使用する場合:

  • 戻り値の結果セット: OUTPUT または戻り値の結果セットを使用するストアド プロシージャに対して、Fabric によって自動的に変更が生成されます。 返される列は、GraphQL の変更の戻り値の型になります。
  • ビジネス ロジックをカプセル化する: 検証、変換、複雑な計算は、クライアント コードではなくストアド プロシージャに保持します。 これにより、すべてのアプリケーションの一貫性が確保されます。
  • エラーを適切に処理する: THROW ステートメントを使用して、GraphQL API を介して表示できる意味のあるエラー メッセージを返します。
  • ID 生成を検討する: ID 列を使用していない場合は、カスタム ID 生成ロジック (MAX のインクリメントなど) のみを使用します。 運用シナリオでは、通常、ID 列の方が信頼性が高くなります。
  • ドキュメント パラメーター: GraphQL フィールド名に適切に変換する明確なパラメーター名を使用します。

GraphQL 用 Fabric API を介してストアド プロシージャを公開することで、SQL の手続き型ロジックの機能と GraphQL の柔軟なクエリ インターフェイスを組み合わせて、堅牢で保守可能なデータ アクセス パターンを作成できます。