이 글은 GraphQL Docs를 읽고 정리한 글입니다.
GraphQL 스키마가 지원하는 쿼리에 대한 정보를 확인하기 위해 introspection 시스템(스키마 확인 시스템)을 이용할 수 있다.
__schema
필드로 유효한 타입 확인하기Query, Character, Human, Episode, Droid
: 타입 시스템에서 정의한 것들String, Boolean
: 타입 시스템이 제공하는 내장 스칼라__Schema, __Type, __TypeKind, __Field, __InputValue, __EnumValue, __Directive...
: __
가 붙어 있다면 스키마 확인 시스템의 일부임을 나타낸다.아래 쿼리를 통해 스키마에 정의되어 있는 타입의 이름을 확인할 수 있다.
쿼리
{
__schema {
types {
name
}
}
}
실행 결과
{
"data": {
"__schema": {
"types": [
{
"name": "Query"
},
{
"name": "Episode"
},
{
"name": "Character"
},
{
"name": "ID"
},
{
"name": "String"
},
...
{
"name": "Mutation"
},
{
"name": "__Schema"
},
{
"name": "__Type"
},
{
"name": "__TypeKind"
},
{
"name": "__Field"
},
{
"name": "__InputValue"
},
{
"name": "__EnumValue"
},
{
"name": "__Directive"
},
{
"name": "__DirectiveLocation"
}
]
}
}
}
__schema
필드를 통해 모든 타입의 쿼리가 시작될 타입을 알아보자.Query
라고 지정했다.Query
는 관습적으로 사용하는 시작 타입이다(Query 대신 다른 이름을 써도 된다).쿼리
{
__schema {
queryType {
name
}
}
}
실행 결과
{
"data": {
"__schema": {
"queryType": {
"name": "Query"
}
}
}
}
아래와 같이 쿼리하면 특정 객체가 사용할 수 있는 필드를 확인할 수 있다.
아래 예시의 경우 Droid
객체를 스키마 확인 시스템에 요청한다.
쿼리
{
__type(name: "Droid") {
name
fields {
name
type {
name
kind
}
}
}
}
실행 결과
{
"data": {
"__type": {
"name": "Droid",
"fields": [
{
"name": "id",
"type": {
"name": null,
"kind": "NON_NULL"
}
},
{
"name": "name",
"type": {
"name": null,
"kind": "NON_NULL"
}
},
{
"name": "friends",
"type": {
"name": null,
"kind": "LIST"
},
{
"name": "appearsIn",
"type": {
"name": null,
"kind": "NON_NULL"
}
},
{
"name": "primaryFunction",
"type": {
"name": "String",
"kind": "SCALAR"
}
}
]
}
}
}