GraphQL에서 인트로스펙션 JSON 생성 — Numio
@graphql-codegen/introspection을 사용해 GraphQL SDL을 표준 introspection 쿼리의 JSON 결과로 변환합니다. 출력에는 최상위 __schema 객체가 있으며, 루트 타입, 내장 타입을 포함한 모든 타입, 디렉티브가 들어 있습니다.
일부 IDE 플러그인이나 클라이언트 생성기처럼 SDL 대신 introspection JSON을 요구하는 도구를 위해 schema.json을 만듭니다.
이럴 때 사용하세요
- 일부 IDE 플러그인이나 클라이언트 생성기처럼 SDL 대신 introspection JSON을 요구하는 도구를 위해 schema.json을 만듭니다.
- introspection 데이터에서 필드 타입이 NON_NULL과 LIST kind로 어떻게 감싸지는지 확인합니다.
사용 방법
- GraphQL Schema 편집기에 스키마 SDL을 붙여 넣습니다.
- Introspection JSON 패널에 JSON이 나타날 때까지 기다립니다. 필드가 하나뿐인 스키마도 약 1,000줄이 생성됩니다.
- 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 메타 타입, 디렉티브 정의를 포함한 전체 타입 시스템을 기술하기 때문입니다.