次の方法で共有


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

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

この例では、ストアド プロシージャを使用して、検証、書式設定、および ID 生成のためのサーバー側ロジックを使用して、新しい製品を登録する方法について説明します。これは、すべて Fabric の GraphQL の変更によって公開されます。

始めましょう

ここでは、Fabric で SQL データベースを作成することから始めます。

  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;

[ 実行 ] をクリックして実行をテストします。 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 を作成する

SQL テーブルから API を作成することは、高速で簡単で簡単です。 SQL データベース リボンの [ GraphQL 用の新しい API ] ボタンをクリックし、API に名前を付けるだけで済みます。

次に、データベース内の SalesLT テーブルと先ほど作成したストアド プロシージャを選択し、[ 読み込み] をクリックします。

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

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

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

API の準備ができたら、ストアド プロシージャは Fabric GraphQL スキーマの変更として使用できるようになります。 クエリ エディターに移動し、次の変更を実行します。

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 ポータルの変更

ヒント

  • Fabric GraphQL は、プロシージャの出力で定義された結果セットを返すストアド プロシージャの変更フィールドを自動的に生成します。
  • ビジネス ロジックは、クライアントではなく、プロシージャ内に存在します。
  • 決定論的 ID の生成は、ID 列に依存しない場合にのみ使用します。

Fabric API を使用してストアド プロシージャを公開すると、データの SQL で堅牢で一貫性のある規則を定義し、GraphQL を介してクリーンにアクセスできます。