다음을 통해 공유


GraphQL 엔드포인트를 호출하는 방법

DAB(Data API Builder)의 GraphQL 엔드포인트를 사용하면 정밀도로 데이터를 쿼리하고 수정할 수 있습니다. 각 쿼리는 필요한 필드를 정확히 선언하고 필터링, 순서 지정 및 페이징 결과에 대한 인수를 지원합니다.

기본적으로 DAB는 다음 위치에서 GraphQL 엔드포인트를 호스팅합니다.

https://{base_url}/graphql

구성을 통해 노출되는 엔터티는 GraphQL 스키마에 자동으로 포함됩니다. 예를 들어 엔터티가 있는 booksauthors 경우 둘 다 스키마에 루트 필드로 표시됩니다.

비고

최신 GraphQL 클라이언트 또는 IDE(예: Apollo, Insomnia 또는 VS Code GraphQL)를 사용하여 스키마 및 자동 완성 필드를 탐색합니다.

데이터 API 작성기에서 지원되는 키워드

개념 GraphQL 목적
Projection 항목 반환할 필드 선택
Filtering 필터 조건별로 행 제한
정렬 orderBy 정렬 순서 정의
페이지 크기 첫 번째 페이지당 항목 제한
지속 마지막 페이지에서 계속

기본 구조

모든 GraphQL 쿼리는 엔터티를 나타내는 루트 필드로 시작합니다.

{
  books {
    items {
      id
      title
      price
    }
  }
}

그 결과 선택 집합과 셰이프가 같은 JSON 개체가 생성됩니다.

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune", "price": 20 },
        { "id": 2, "title": "Foundation", "price": 18 }
      ]
    }
  }
}

비고

기본적으로 DAB는 달리runtime.pagination.default-page-size 구성하지 않는 한 쿼리당 최대 100개의 항목을 반환합니다.

쿼리 형식

각 엔터티는 다음 두 가지 표준 루트 쿼리를 지원합니다.

Query 설명
entity_by_pk 기본 키로 레코드 하나를 반환합니다.
entities 필터와 일치하는 레코드 목록을 반환합니다.

하나의 레코드를 반환하는 예제:

{
  book_by_pk(id: 1010) {
    title
    year
  }
}

많은 반환 예제:

{
  books {
    items {
      id
      title
    }
  }
}

결과 필터링

인수를 filter 사용하여 반환되는 레코드를 제한합니다.

{
  books(filter: { title: { contains: "Foundation" } }) {
    items { id title }
  }
}

이 쿼리는 제목에 "Foundation"이 포함된 모든 책을 반환합니다.

필터는 논리 연산자를 사용하여 비교를 결합할 수 있습니다.

{
  authors(filter: {
    or: [
      { first_name: { eq: "Isaac" } }
      { last_name: { eq: "Asimov" } }
    ]
  }) {
    items { first_name last_name }
  }
}

지원되는 연산자(예: , eq, neqltlte)에 대한 isNull를 참조하세요.

결과 정렬

인수는 orderBy 레코드 정렬 방법을 정의합니다.

{
  books(orderBy: { year: DESC, title: ASC }) {
    items { id title year }
  }
}

year을 기준으로 내림차순으로 정렬된 책을 먼저 반환한 후, title을 기준으로 정렬됩니다.

자세한 내용은 orderBy 인수 참조 를 참조하세요.

결과 제한

인수는 first 단일 요청에서 반환되는 레코드 수를 제한합니다.

{
  books(first: 5) {
    items { id title }
  }
}

기본적으로 기본 키로 정렬된 처음 5권의 책을 반환합니다. 구성된 최대 페이지 크기를 요청하는 데 사용할 first: -1 수도 있습니다.

첫 번째 인수 참조에서 자세히 알아봅니다.

연속 결과

다음 페이지를 가져오려면 이전 쿼리의 after 커서와 함께 인수를 사용합니다.

{
  books(first: 5, after: "eyJpZCI6NX0=") {
    items { id title }
  }
}

토큰은 after 이전 페이지가 끝난 위치를 표시합니다. 자세한 내용은 인수 참조 뒤 를 참조하세요.

필드 선택(프로젝션)

GraphQL에서 응답에 표시되는 필드를 정확히 선택합니다. 와 같은 SELECT *와일드카드가 없습니다. 필요한 항목만 요청합니다.

{
  books {
    items { id title price }
  }
}

별칭을 사용하여 응답에서 필드 이름을 바꿀 수도 있습니다.

{
  books {
    items {
      bookTitle: title
      cost: price
    }
  }
}

자세한 내용은 필드 프로젝션 참조 를 참조하세요.