GraphQL에서 요청하는 필드는 DAB(Data API Builder)가 반환하는 것을 정확히 정의합니다. DAB는 요청된 매핑된(노출된) 열과 내부적으로 가져와야 하는 추가 열만 포함하여 이러한 선택 항목을 매개 변수가 있는 SQL로 컴파일합니다. 여기에는 관계(외래 키), 기본 키 또는 페이지 매김 및 커서 생성에 사용되는 안정적인 순서 지정에 필요한 열이 포함될 수 있습니다.
비고
GraphQL에는 .와 같은 SELECT *와일드카드가 없습니다. 클라이언트는 각 필드를 명시적으로 지정해야 합니다.
이 문서의 REST 버전으로 이동합니다.
기본 선택
매핑된 몇 가지 필드를 쿼리합니다.
GraphQL 쿼리
query {
books {
items {
id
title
price
}
}
}
개념적 SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
샘플 응답
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
필드 별칭
별칭은 데이터베이스가 아닌 응답의 필드 이름을 바꿉니다. SQL 계층은 GraphQL 필드 이름에 별칭을 지정하지 않습니다. 별칭은 데이터 검색 후에 발생합니다.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
개념적 SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
샘플 응답
별칭을 사용하는 경우:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
중첩된 선택 영역
구성에 정의된 관계는 중첩된 쿼리를 허용합니다. 아래의 개념적 SQL은 단일 조인을 보여줍니다. 실제로 DAB는 하나의 평면화된 조인 대신 하나 이상의 매개 변수가 있는 쿼리(예: 부모 쿼리와 일괄 처리된 자식 페치)를 실행할 수 있습니다.
GraphQL 쿼리
query {
books {
items {
id
title
category {
id
name
}
}
}
}
개념적 SQL
SELECT
b.id,
b.sku_title AS title,
c.id AS category_id,
c.name AS category_name
FROM dbo.books AS b
JOIN dbo.categories AS c
ON b.category_id = c.id;
샘플 응답
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
일대다 선택
역 관계를 트래버스할 수도 있습니다. 다시 말하지만 SQL은 개념적입니다. 실제 실행은 부모 행을 중복 제거하고 자식 컬렉션을 별도로 구체화할 수 있습니다.
GraphQL 쿼리
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
개념적 SQL
SELECT
c.id,
c.name,
b.id AS book_id,
b.sku_title AS title
FROM dbo.categories AS c
JOIN dbo.books AS b
ON c.id = b.category_id;
샘플 응답
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
구성 예
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
참고하십시오
| 개념 | REST | GraphQL | 목적 |
|---|---|---|---|
| Projection | $select | 항목 | 반환할 필드 선택 |
| Filtering | $filter | 필터 | 조건별로 행 제한 |
| 정렬 | $orderby | orderBy | 정렬 순서 정의 |
| 페이지 크기 | $first | 첫 번째 | 페이지당 항목 수 제한 |
| 연속 | $after | 후 | 커서를 사용하여 마지막 페이지에서 계속 |
비고
REST 키워드는 OData 규칙에 따라 시작 $합니다.