JSON 데이터를 GraphQL 스키마로 변환 — Numio
샘플 JSON으로 GraphQL SDL 객체 타입을 생성합니다. 루트는 AutogeneratedMainType이 되고, 중첩 객체나 객체 배열은 각각 이름 있는 타입이 되며, 배열의 모든 요소는 하나의 타입으로 병합됩니다.
기존 REST 엔드포인트의 응답 하나로, 그것을 감싸는 GraphQL 래퍼의 타입 초안을 만들 때.
JSON
GraphQL
이럴 때 사용하세요
- 기존 REST 엔드포인트의 응답 하나로, 그것을 감싸는 GraphQL 래퍼의 타입 초안을 만들 때.
- 샘플 데이터로 목 서버나 스키마 우선 프로토타입의 초기 스키마를 얻을 때.
사용 방법
- JSON 객체 또는 하나의 루트 타입으로 병합될 객체 배열을 왼쪽 편집기에 붙여 넣거나, 파일 불러오기 버튼으로 UTF-8 파일을 엽니다.
- 생성된 타입을 확인합니다. 이름은 키에서 오고(posts는 Posts) 스칼라는 String, Int, Float, Boolean으로 매핑됩니다.
- SDL을 복사한 뒤 필수 필드에 !를 붙이고, id 필드를 ID로 바꾸고, AutogeneratedMainType의 이름을 바꿉니다.
JSON 객체
{
"id": "u_1",
"name": "Ada",
"age": 36,
"score": 9.5,
"nickname": null,
"tags": ["math"],
"address": { "city": "London" },
"posts": [{ "id": 7, "title": "Notes" }]
}GraphQL 스키마(SDL)
type AutogeneratedMainType {
id: String
name: String
age: Int
score: Float
nickname: String
tags: [String]
address: Address
posts: [Posts]
}
type Address {
city: String
}
type Posts {
id: Int
title: String
}세부 정보 및 제한 사항
필드는 배열의 모든 요소에 걸쳐 병합됩니다. null과 빈 배열은 String과 [String]이 되고, Int와 Float가 섞이면 Float, 그 밖의 충돌은 String으로 대체됩니다.
타입 이름은 키에서 옵니다(posts는 Posts). 같은 키에 모양이 다른 객체가 있으면 나중 것은 덮어쓰지 않고 부모 이름을 붙인 타입(예: AB)이 됩니다.
!(non-null), ID, Query 타입, input 타입은 생성되지 않습니다. GraphQL Int는 32비트이므로 32비트 범위를 벗어난 정수는 Float가 됩니다.
브라우저에서 실행되며 결과는 Prettier로 포맷됩니다. 잘못된 JSON은 파싱 오류를 보여 줍니다.
FAQ
루트가 JSON 배열이어도 변환되나요?
객체를 담고 있다면 됩니다. 모든 요소가 AutogeneratedMainType으로 병합되므로 일부 요소에만 있는 필드도 포함됩니다. 단순 값만 있는 루트 배열은 필드가 없어 거부됩니다.
id 필드가 ID가 아니라 String이 되는 이유는 무엇인가요?
타입은 JSON 값으로만 정해집니다. 문자열 id는 String, 숫자는 Int가 됩니다. 직접 ID:로 바꾸세요.
null 값은 어떤 타입이 되나요?
null 값에는 타입 정보가 없으므로 String이 됩니다. 필드가 숫자나 객체라면 실제 샘플 값으로 바꾸세요.