GraphQL - 스키마 확인

Jihun Kim·2022년 4월 22일
1

GraphQL

목록 보기
6/16
post-thumbnail

이 글은 GraphQL Docs를 읽고 정리한 글입니다.


GraphQL 스키마가 지원하는 쿼리에 대한 정보를 확인하기 위해 introspection 시스템(스키마 확인 시스템)을 이용할 수 있다.


쿼리 방법

__schema 필드로 유효한 타입 확인하기

  • 만약 어떤 유효한 타입이 있는 지 알지 못하는 상황이라면 클라이언트가 이를 알아내기 위해 Query의 루트 타입에서 항상 사용할 수 있는 필드이다.
  • 쿼리 하면 아래와 같이 다양한 타입을 확인할 수 있다.
    - 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"
          }
        }
      ]
    }
  }
}
profile
쿄쿄

0개의 댓글