개요
Atlas GraphQL API를 통해 MongoDB collection의 데이터를 클라이언트 애플리케이션에 노출할 수 있습니다. Atlas App Services는 컬렉션 스키마 를 기반으로 GraphQL 유형과 해석기를 자동으로 생성하고 모든 GraphQL 작업에 대한 컬렉션 규칙 을 적용합니다.
절차
1. collection의 역할 구성
App Services는 들어오는 모든 GraphQL 요청에 대해 컬렉션 규칙 을 적용하므로 애플리케이션에 필요한 권한이 있는 컬렉션 역할 을 하나 이상 정의해야 합니다.
모든 GraphQL 요청에는 요청을 보낸 로그인한 App Services 사용자를 식별하는 인증 토큰이 포함되어 있습니다. App Services는 GraphQL 작업에 포함된 모든 문서의 역할을 평가하고 사용자가 볼 수 있는 권한이 있는 필드와 문서만 반환합니다. App Services에서 필드를 생략하면 반환된 문서에 해당 필드의 null
값이 포함됩니다.
2. collection의 문서에 대한 스키마 정의하기
GraphQL에서는 모든 데이터가 잘 정의된 유형을 준수해야 하므로 컬렉션의 문서에 대해 스키마 정의 및 적용 을 수행해야 합니다. Atlas App Services는 컬렉션 스키마를 기반으로 컬렉션의 문서에 대한 GraphQL 유형 및 해석기 를 자동으로 생성하고 스키마가 변경될 때마다 새 유형을 다시 생성합니다.
참고
스키마 자동 생성
App Services는 collection의 기존 문서 샘플을 기반으로 collection 스키마를 생성할 수 있습니다. 기존 데이터가 없는 경우, 스키마에 포함하려는 필드의 모의 구현이 있는 새 문서를 삽입한 다음 이를 기반으로 스키마를 생성할 수 있습니다.
3. 다른 collection과의 관계 정의
collection의 각 문서를 외부 collection에 있는 하나 이상의 문서에 연결하는 관계 를 정의할 수 있습니다. 관계를 정의하는 방법을 알아보려면 관계 정의를 참조하세요 .
관계를 사용하면 GraphQL 읽기 및 쓰기 작업에서 문서를 유창하게 참고하고 쿼리할 수 있습니다. 예를 들어, 사람을 쿼리하고 동일한 people
collection에서 각 자녀에 대한 전체 문서를 포함할 수 있습니다.
query { person(query: { name: "Molly Weasley" }) { _id name age picture children { _id name age picture } } }
4. 데이터 유형 이름 지정
App Services는 컬렉션의 문서가 준수하는 데이터 유형을 기반으로 생성하는 GraphQL 유형의 이름을 지정합니다. 스키마의 title
필드를 스키마가 정의하는 데이터 유형의 이름으로 설정하여 GraphQL 유형의 이름을 구성할 수 있습니다.
title
필드를 설정할 수 있는 세 가지 상황은 다음과 같습니다.
스키마의 루트 수준에서
title
를 설정하여 컬렉션에 있는 각 문서의 유형 이름을 정의할 수 있습니다. 제목을 지정하지 않으면 App Services에서 collection 이름을 대신 사용합니다.내장된 객체 스키마에서
title
를 설정하여 내장된 객체의 유형 이름을 정의할 수 있습니다.필드 스키마에서
title
를 설정하여 관계가 정의된 필드의 유형 이름을 정의할 수 있습니다. App Services는 GraphQL에서 관계를 확인할 때 정의된 필드 이름 대신title
을(를) 사용합니다.
{ "title": "movie", "properties": { "_id": { "bsonType": "objectId" }, "title": { "bsonType": "string" }, "year": { "bsonType": "int" }, "director": { "bsonType": "int" } } }
참고
단수형 및 복수형
App Services는 각 collection에 대해 두 개의 GraphQL 쿼리 를 생성합니다.
컬렉션 에서 특정 문서 찾는 단수형 쿼리 입니다. 쿼리 스키마의
title
과 동일한 이름을 사용합니다. 스키마의title
가 복수형 명사인 경우 App Services는 Rails ActiveSupport 굴절 규칙에 따라 단수형을 사용하려고 시도합니다.collection에 있는 모든 문서의 하위 집합을 찾는 복수형 쿼리입니다. 가능한 경우 쿼리는 단수형 쿼리 이름의 복수형을 사용합니다. App Services에서 이름을 복수형으로 변환할 수 없거나 복수형으로 지정된 이름이 단수형 이름과 동일한 경우 복수형 쿼리는 단수형 쿼리와 동일한 이름을 사용하며 끝에
"s"
을 붙입니다.
예시
laboratory.mice
collection에 대해 다음 스키마가 구성됩니다.
{ "title": "Mouse", "bsonType": "object", "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" }, "age": { "bsonType": "int" } } }
App Services는 스키마를 기반으로 mouse
(단수) 및 mice
(복수)이라는 두 가지 쿼리를 생성합니다.
query Mice { mouse(query: { _id: "5ebe6819197003ddb1f74475" }) { name age } mice { name age } }
다음 단계
collection에 대한 스키마를 정의하면 App Services는 GraphQL API를 통해 collection의 문서를 자동으로 노출합니다. 이제 클라이언트 애플리케이션에서 연결하여 쿼리 및 변형을 실행할 수 있습니다.