다음을 통해 공유


데이터 API 작성기용 GraphQL의 여러 변형

DAB(데이터 API 작성기)는 여러 변형 작업을 단일 트랜잭션으로 결합하는 것을 지원합니다. 여러 변형은 동일한 엔터티에 속하는 여러 항목을 만들거나 관련 엔터티에 속하는 여러 항목을 만들어야 하는 시나리오를 지원합니다. 이 가이드에서는 여러 변형 연산을 사용하는 샘플 시나리오를 안내합니다.

필수 조건

  • 기존 SQL 서버 및 데이터베이스.
  • 데이터 API 작성기 CLI. CLI 설치
  • 데이터베이스 클라이언트(SQL Server Management Studio, Azure Data Studio 등)

테이블 만들기

먼저 책과 해당 챕터를 나타내는 두 개의 기본 테이블을 만듭니다. 책은 해당 챕터와 일대다 관계를 가지고 있습니다.

  1. 기본 설정 클라이언트 또는 도구를 사용하여 SQL 데이터베이스에 연결합니다.

  2. 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
    )
    GO
    
  3. Chapters이라는 이름의 테이블을 만들고 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
    
  4. 몇 가지 일반적인 SQL 쿼리를 사용하여 테이블이 생성되는지 확인합니다.

    SELECT * FROM dbo.Books
    
    SELECT * FROM dbo.Chapters
    

    비고

    이 시점에서 쿼리는 데이터를 반환하지 않아야 합니다.

구성 파일 빌드

이제 DAB CLI를 사용하여 구성 파일, 엔터티 및 엔터티 관계를 만듭니다.

  1. 터미널 열기

  2. SQL Database 연결 문자열을 명명 SQL_CONNECTION_STRING된 셸 변수로 저장합니다.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. 다음 속성을 지정하여 실행 dab init 합니다.

    가치
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string SQL_CONNECTION_STRING 이전 단계에서 만든 셸 변수를 사용합니다.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. 다음 속성을 지정하는 Book 엔터티를 추가하려면 실행 dab add 합니다.

    가치
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. 다시 실행 dab add 하여 이제 다음 속성을 지정하는 Chapter 엔터티를 추가합니다.

    가치
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. 다음 속성을 지정하여 Book to Chapter 관계를 만들려면 실행 dab update 합니다.

    가치
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. 마지막으로 마지막으로 한 번 실행 dab update 하여 다음 속성을 지정하는 챕터 투 북 관계를 만듭니다.

    가치
    relationship book
    cardinality one
    dab update Chapter --relationship book --target.entity Book --cardinality one
    

여러 생성 변이 실행

작업을 마무리하려면 DAB CLI를 사용하여 API를 실행하고 바나나 케이크 팝을 사용하여 GraphQL 엔드포인트를 테스트합니다.

  1. 현재 구성을 사용하여 런타임 엔진을 시작합니다.

    dab start
    
  2. 실행 중인 애플리케이션의 /graphql 상대 엔드포인트로 이동합니다. 이 엔드포인트는 바나나 케이크 팝 인터페이스를 엽니다.

    비고

    기본적으로 다음과 같습니다 https://localhost:5001/graphql.

  3. GraphQL 변형을 작성하여 데이터베이스의 두 테이블에 세 개의 고유 행을 만듭니다. 이 변형은 "다중 생성"이라는 단일 작업에서 BookChapter 엔터티를 모두 사용합니다. 변형에 대해 다음 속성을 사용합니다.

    엔터티 유형 아이디 이름 페이지 연도
    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
          }
        }
      }
    }
    
  4. 변형의 출력을 관찰합니다. 변경으로 인해 두 엔터티 형식에 대한 관련 데이터가 생성되었습니다.

    {
      "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
              }
            ]
          }
        }
      }
    }
    
  5. GraphQL 쿼리를 사용하여 관련 장을 포함하여 데이터베이스의 모든 책을 검색합니다.

    query {
      books {
        items {
          pages
          title
          year
          chapters {
            items {
              name
              pages
            }
          }
        }
      }
    }
    

    비고

    이 시점에서 쿼리는 두 개의 장이 있는 단일 책을 반환해야 합니다.

  6. 이 쿼리의 출력을 중첩된 장 배열을 포함한 책 배열과 함께 관찰합니다.

    {
      "data": {
        "books": {
          "items": [
            {
              "pages": 200,
              "title": "Introduction to Data API builder",
              "year": 2024,
              "chapters": {
                "items": [
                  {
                    "name": "Configuration files",
                    "pages": 150
                  },
                  {
                    "name": "Running",
                    "pages": 50
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
  7. 기본 설정 클라이언트 또는 도구를 사용하여 SQL 데이터베이스에 다시 연결합니다.

  8. 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
    

    비고

    이 쿼리는 두 개의 장 레코드를 반환해야 합니다.