기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
GraphQL 객체 유형에는 이름과 필드가 있으며 이러한 필드에는 하위 필드가 있을 수 있습니다. 궁극적으로 객체 유형의 필드는 쿼리의 리프를 나타내는 스칼라 유형으로 해석되어야 합니다. 객체 유형과 스칼라에 대한 자세한 내용은 GraphQL 웹 사이트의 스키마 및 유형
기본 GraphQL 스칼라 세트 외에도 AWS 접두사로 시작하는 서비스 정의 스칼라를 사용할 AWS AppSync 수 있습니다. AWS AppSync 는 사용자 정의(사용자 지정) 스칼라 생성을 지원하지 않습니다. 기본 스칼라 또는 AWS 스칼라를 사용해야 합니다.
AWS를 사용자 지정 객체 형식의 접두사로 사용할 수 없습니다.
다음 섹션은 스키마 입력에 대한 참조입니다.
기본 스칼라
GraphQL은 다음과 같은 디폴트 스칼라를 정의합니다.
ID
-
객체의 고유한 식별자입니다. 이 스칼라는
String
처럼 직렬화되어 있지만 사람이 읽을 수는 없습니다. String
-
UTF-8 문자 시퀀스입니다.
Int
-
-(231)과 231-1 사이의 정수 값입니다.
Float
-
IEEE 754 부동 소수점 값입니다.
Boolean
-
부울 값으로
true
또는false
둘 중 하나입니다.
AWS AppSync 스칼라
AWS AppSync 는 다음과 같은 스칼라를 정의합니다.
AWSDate
-
YYYY-MM-DD
형식의 확장 ISO 8601 날짜문자열입니다. AWSTime
-
hh:mm:ss.sss
형식의 확장 ISO 8601 시간문자열입니다. AWSDateTime
-
YYYY-MM-DDThh:mm:ss.sssZ
형식의 확장 ISO 8601 날짜 및 시간문자열입니다.
참고
AWSDate
, AWSTime
및 AWSDateTime
스칼라는 선택적으로 시간대 오프셋1970-01-01Z
, 1970-01-01-07:00
및 1970-01-01+05:30
값은 AWSDate
에 대해 모두 유효합니다. 시간대 오프셋은 Z
(UTC)이거나 시간 및 분(및 선택적으로 초) 단위의 오프셋이어야 합니다. 예: ±hh:mm:ss
. 시간대 오프셋의 초 필드는 ISO 8601 표준을 따르지 않더라도 유효한 것으로 간주됩니다.
AWSTimestamp
-
1970-01-01-T00:00Z
이전 또는 이후의 시간(초)을 나타내는 정수 값입니다. AWSEmail
-
RFC 822
에 정의된 local-part@domain-part
형식의 이메일 주소입니다. AWSJSON
-
JSON 문자열입니다. 유효한 JSON 구문은 리터럴 입력 문자열이 아닌 맵, 목록 또는 스칼라 값으로 자동 구문 분석되어 해석기 코드에 로드됩니다. 인용되지 않은 문자열이나 잘못된 JSON으로 인해 GraphQL 검증 오류가 발생합니다.
AWSPhone
-
전화번호입니다. 이 값은 문자열로 저장됩니다. 전화번호에는 숫자 그룹을 구분하기 위한 공백이나 하이픈이 포함될 수 있습니다. 국가 코드가 없는 전화번호는 북아메리카 번호 체계(NANP)
를 준수하는 미국/북미 번호로 간주됩니다. AWSURL
-
RFC 1738
에 정의된 URL입니다. 예: https://www.amazon.com/dp/B000NZW3KC/
또는mailto:example@example.com
. URL은 스키마(http
,mailto
)를 포함해야 하며 경로 부분에 슬래시(//
)를 두 개 포함할 수 없습니다. AWSIPAddress
-
유효한 IPv4 또는 IPv6 주소입니다. IPv4 주소는 네 개의 점으로 구분된 표기법(
123.12.34.56
)으로 표시되어야 합니다. IPv6 주소는 괄호가 없고 콜론으로 구분된 형식(1a2b:3c4b::1234:4567
)이어야 합니다. 서브넷 마스크를 나타내는 선택적 CIDR 접미사(123.45.67.89/16
)를 포함할 수 있습니다.
스키마 예제 사용
다음 예제 GraphQL 스키마는 모든 사용자 지정 스칼라를 '객체'로 사용하고 기본 put, get 및 list 작업에 대한 해석기 요청 및 응답 템플릿을 보여줍니다. 마지막으로 예제는 쿼리 및 뮤테이션을 실행할 때 이를 사용하는 방법을 보여줍니다.
type Mutation { putObject( email: AWSEmail, json: AWSJSON, date: AWSDate, time: AWSTime, datetime: AWSDateTime, timestamp: AWSTimestamp, url: AWSURL, phoneno: AWSPhone, ip: AWSIPAddress ): Object } type Object { id: ID! email: AWSEmail json: AWSJSON date: AWSDate time: AWSTime datetime: AWSDateTime timestamp: AWSTimestamp url: AWSURL phoneno: AWSPhone ip: AWSIPAddress } type Query { getObject(id: ID!): Object listObjects: [Object] } schema { query: Query mutation: Mutation }
putObject
에 대한 요청 템플릿의 모양은 다음과 같습니다. putObject
는 PutItem
작업을 사용하여 Amazon DynamoDB 테이블에서 항목을 생성하거나 업데이트합니다. 참고로 이 코드 조각에는 데이터 소스로 구성된 Amazon DynamoDB 테이블이 없습니다. 다음은 예시용으로만 사용되고 있습니다.
{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id": $util.dynamodb.toDynamoDBJson($util.autoId()), }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
putObject
의 응답 템플릿은 다음과 같은 결과를 반환합니다.
$util.toJson($ctx.result)
getObject
에 대한 요청 템플릿의 모양은 다음과 같습니다. getObject
는 GetItem
작업을 시작하여 주어진 기본 키와 함께 항목에 대한 속성 집합을 반환합니다. 참고로 이 코드 조각에는 데이터 소스로 구성된 Amazon DynamoDB 테이블이 없습니다. 다음은 예시용으로만 사용되고 있습니다.
{ "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }
getObject
의 응답 템플릿은 다음과 같은 결과를 반환합니다.
$util.toJson($ctx.result)
listObjects
에 대한 요청 템플릿의 모양은 다음과 같습니다. listObjects
는 Scan
작업을 사용하여 하나 이상의 항목과 속성을 반환합니다. 참고로 이 코드 조각에는 데이터 소스로 구성된 Amazon DynamoDB 테이블이 없습니다. 다음은 예시용으로만 사용되고 있습니다.
{ "version" : "2017-02-28", "operation" : "Scan", }
listObjects
의 응답 템플릿은 다음과 같은 결과를 반환합니다.
$util.toJson($ctx.result.items)
다음은 이 스키마를 GraphQL 쿼리와 함께 사용하는 몇 가지 예제입니다.
mutation CreateObject { putObject(email: "example@example.com" json: "{\"a\":1, \"b\":3, \"string\": 234}" date: "1970-01-01Z" time: "12:00:34." datetime: "1930-01-01T16:00:00-07:00" timestamp: -123123 url:"https://amazon.com" phoneno: "+1 555 764 4377" ip: "127.0.0.1/8" ) { id email json date time datetime url timestamp phoneno ip } } query getObject { getObject(id:"0d97daf0-48e6-4ffc-8d48-0537e8a843d2"){ email url timestamp phoneno ip } } query listObjects { listObjects { json date time datetime } }