본문으로 건너뛰기

GraphQL에서 인트로스펙션 JSON 생성 — Numio

@graphql-codegen/introspection을 사용해 GraphQL SDL을 표준 introspection 쿼리의 JSON 결과로 변환합니다. 출력에는 최상위 __schema 객체가 있으며, 루트 타입, 내장 타입을 포함한 모든 타입, 디렉티브가 들어 있습니다.

일부 IDE 플러그인이나 클라이언트 생성기처럼 SDL 대신 introspection JSON을 요구하는 도구를 위해 schema.json을 만듭니다.

GraphQL Schema

Introspection JSON

이럴 때 사용하세요

  • 일부 IDE 플러그인이나 클라이언트 생성기처럼 SDL 대신 introspection JSON을 요구하는 도구를 위해 schema.json을 만듭니다.
  • introspection 데이터에서 필드 타입이 NON_NULL과 LIST kind로 어떻게 감싸지는지 확인합니다.

사용 방법

  1. GraphQL Schema 편집기에 스키마 SDL을 붙여 넣습니다.
  2. Introspection JSON 패널에 JSON이 나타날 때까지 기다립니다. 필드가 하나뿐인 스키마도 약 1,000줄이 생성됩니다.
  3. JSON을 복사하거나 다운로드해 schema.json 등으로 저장합니다.

GraphQL 스키마

type Query {
  hello(name: String): String!
}

Introspection JSON

{
  "__schema": {
    "queryType": {
      "name": "Query"
    },
    "mutationType": null,
    "subscriptionType": null,
    "types": [
      {
        "kind": "OBJECT",
        "name": "Query",
        "description": null,
        "fields": [
          {
            "name": "hello",
            "description": null,
            "args": [
              {
                "name": "name",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
…

세부 정보 및 제한 사항

내장 스칼라(String, Boolean), introspection 타입(__Schema, __Type, __Field 등), 내장 디렉티브(include, skip, deprecated, specifiedBy)는 항상 포함됩니다.

JSON은 "data" 키로 감싸지 않고 바로 __schema로 시작합니다.

변환은 브라우저 Web Worker에서 실행됩니다. 이 페이지는 스키마만 받으며, 실제 엔드포인트에 쿼리하지 않습니다.

FAQ

URL에서 introspection JSON을 가져올 수 있나요?

아니요. 페이지는 붙여 넣은 SDL만 변환하며 서버에 introspection 쿼리를 보내지 않습니다. 먼저 서버에서 SDL을 내보낸 뒤 여기에 붙여 넣으세요.

deprecated 필드도 포함되나요?

네. 모든 필드와 enum 값에 isDeprecated와 deprecationReason이 표시되므로, @deprecated가 붙은 필드는 isDeprecated: true로 나타납니다.

작은 스키마인데 출력이 큰 이유는 무엇인가요?

introspection 결과는 직접 정의한 타입뿐 아니라 내장 스칼라, introspection 메타 타입, 디렉티브 정의를 포함한 전체 타입 시스템을 기술하기 때문입니다.

사양 및 참고 자료