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, neqlt및 lte)에 대한 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
}
}
}
자세한 내용은 필드 프로젝션 참조 를 참조하세요.