DAB(데이터 API 작성기)는 여러 변형 작업을 단일 트랜잭션으로 결합하는 것을 지원합니다. 여러 변형은 동일한 엔터티에 속하는 여러 항목을 만들거나 관련 엔터티에 속하는 여러 항목을 만들어야 하는 시나리오를 지원합니다. 이 가이드에서는 여러 변형 연산을 사용하는 샘플 시나리오를 안내합니다.
필수 조건
- 기존 SQL 서버 및 데이터베이스.
- 데이터 API 작성기 CLI. CLI 설치
- 데이터베이스 클라이언트(SQL Server Management Studio, Azure Data Studio 등)
- 클라이언트가 설치되지 않은 경우 Azure Data Studio를 설치합니다.
테이블 만들기
먼저 책과 해당 챕터를 나타내는 두 개의 기본 테이블을 만듭니다. 책은 해당 챕터와 일대다 관계를 가지고 있습니다.
기본 설정 클라이언트 또는 도구를 사용하여 SQL 데이터베이스에 연결합니다.
Books이라는 이름의 테이블을id,title,year,pages열로 생성합니다.DROP TABLE IF EXISTS dbo.Books; CREATE TABLE dbo.Books ( id int NOT NULL PRIMARY KEY, title nvarchar(1000) NOT NULL, [year] int null, [pages] int null ) GOChapters이라는 이름의 테이블을 만들고id,name,pages열을 추가합니다.book_id열에 외래 키 관계를 맺는id열을Books테이블에 만듭니다.DROP TABLE IF EXISTS dbo.Chapters; CREATE TABLE dbo.Chapters ( id int NOT NULL PRIMARY KEY, [name] nvarchar(1000) NOT NULL, [pages] int null, book_id int NOT NULL, FOREIGN KEY (book_id) REFERENCES dbo.Books(id) ) GO몇 가지 일반적인 SQL 쿼리를 사용하여 테이블이 생성되는지 확인합니다.
SELECT * FROM dbo.BooksSELECT * FROM dbo.Chapters비고
이 시점에서 쿼리는 데이터를 반환하지 않아야 합니다.
구성 파일 빌드
이제 DAB CLI를 사용하여 구성 파일, 엔터티 및 엔터티 관계를 만듭니다.
터미널 열기
SQL Database 연결 문자열을 명명
SQL_CONNECTION_STRING된 셸 변수로 저장합니다.SQL_CONNECTION_STRING="<your-sql-connection-string>"$SQL_CONNECTION_STRING="<your-sql-connection-string>"다음 속성을 지정하여 실행
dab init합니다.가치 database-typemssqlgraphql.multiple-create.enabledtruehost-modedevelopmentconnection-stringSQL_CONNECTION_STRING이전 단계에서 만든 셸 변수를 사용합니다.dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING다음 속성을 지정하는 Book 엔터티를 추가하려면 실행
dab add합니다.가치 sourcedbo.Bookspermissionsanonymous:*dab add Book --source "dbo.Books" --permissions "anonymous:*"다시 실행
dab add하여 이제 다음 속성을 지정하는 Chapter 엔터티를 추가합니다.가치 sourcedbo.Chapterspermissionsanonymous:*dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"다음 속성을 지정하여 Book to Chapter 관계를 만들려면 실행
dab update합니다.가치 relationshipchapterscardinalitymanydab update Book --relationship chapters --target.entity Chapter --cardinality many마지막으로 마지막으로 한 번 실행
dab update하여 다음 속성을 지정하는 챕터 투 북 관계를 만듭니다.가치 relationshipbookcardinalityonedab update Chapter --relationship book --target.entity Book --cardinality one
여러 생성 변이 실행
작업을 마무리하려면 DAB CLI를 사용하여 API를 실행하고 바나나 케이크 팝을 사용하여 GraphQL 엔드포인트를 테스트합니다.
현재 구성을 사용하여 런타임 엔진을 시작합니다.
dab start실행 중인 애플리케이션의
/graphql상대 엔드포인트로 이동합니다. 이 엔드포인트는 바나나 케이크 팝 인터페이스를 엽니다.비고
기본적으로 다음과 같습니다
https://localhost:5001/graphql.GraphQL 변형을 작성하여 데이터베이스의 두 테이블에 세 개의 고유 행을 만듭니다. 이 변형은 "다중 생성"이라는 단일 작업에서
Book및Chapter엔터티를 모두 사용합니다. 변형에 대해 다음 속성을 사용합니다.엔터티 유형 아이디 이름 페이지 연도 책 1 데이터 API 작성기 소개 200 2024 장 2 구성 파일 백오십 장 3 실행 중 50 mutation { createBook( item: { id: 1 title: "Introduction to Data API builder" pages: 200 year: 2024 chapters: [ { id: 2 name: "Configuration files", pages: 150 } { id: 3 name: "Running", pages: 50 } ] } ) { id title pages year chapters { items { name pages } } } }변형의 출력을 관찰합니다. 변경으로 인해 두 엔터티 형식에 대한 관련 데이터가 생성되었습니다.
{ "data": { "createBook": { "id": 1, "title": "Introduction to Data API builder", "pages": 200, "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } } }GraphQL 쿼리를 사용하여 관련 장을 포함하여 데이터베이스의 모든 책을 검색합니다.
query { books { items { pages title year chapters { items { name pages } } } } }비고
이 시점에서 쿼리는 두 개의 장이 있는 단일 책을 반환해야 합니다.
이 쿼리의 출력을 중첩된 장 배열을 포함한 책 배열과 함께 관찰합니다.
{ "data": { "books": { "items": [ { "pages": 200, "title": "Introduction to Data API builder", "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } ] } } }기본 설정 클라이언트 또는 도구를 사용하여 SQL 데이터베이스에 다시 연결합니다.
SQL 쿼리를 사용하여 데이터가 성공적으로 만들어졌는지 확인합니다.
SELECT c.name AS chapterName, c.pages AS chapterPages, b.title AS bookName, b.year AS releaseYear FROM dbo.Chapters c LEFT JOIN dbo.Books b ON b.id = c.book_id비고
이 쿼리는 두 개의 장 레코드를 반환해야 합니다.