다음을 통해 공유


GraphQL용 Fabric API와 함께 저장 프로시저 사용

GraphQL용 Microsoft Fabric API를 사용하면 강력한 형식의 스키마와 풍부한 쿼리 언어를 사용하여 패브릭 SQL 데이터베이스 및 Data Warehouse 및 Lakehouse와 같은 다른 패브릭 데이터 원본에서 데이터를 쉽게 쿼리하고 변경할 수 있으므로 개발자는 사용자 지정 서버 코드를 작성하지 않고도 직관적인 API를 만들 수 있습니다. 저장 프로시저를 사용하여 입력 유효성 검사 및 데이터 변환을 비롯한 복잡한 비즈니스 논리를 캡슐화하고 재사용할 수 있습니다.

이 예제에서는 저장 프로시저를 사용하여 Fabric의 GraphQL 변형을 통해 모두 노출되는 유효성 검사, 서식 및 ID 생성을 위한 서버 쪽 논리를 사용하여 새 제품을 등록하는 방법을 알아봅니다.

시작하기

패브릭에서 SQL 데이터베이스를 만들어 시작합니다.

  1. 패브릭 작업 영역에서 새 항목을 선택한 다음 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 생성을 사용합니다.

패브릭 API를 통해 저장 프로시저를 노출하면 데이터에 대한 강력하고 일관된 규칙을 정의하고 GraphQL을 통해 안전하게 액세스할 수 있습니다.