예제를 바로 봅시다.
type User {
name: String!
age: Int!
email: String!
street: String!
zipcode: String!
city: String!
}
사용자 타입이 있는 경우
주소와 관련된 정보를 사용하여 아래와 같이 나타낼 수 있습니다.
fragment addressDetails on User {
name
street
zipcode
city
}
그리고 주소에 접근하는 쿼리를 작성하는 경우 아래와 같이 편리하게 사용할 수 있습니다.
{
allUsers {
... addressDetails
}
}
# 아래와 같은 의미
{
allUsers {
name
street
zipcode
city
}
}
GraphQL의 중요한 강점 중 하나는 한번의 요청으로 다수의 쿼리를 전송할 수 있다는 것입니다. 하지만 요청되는 필드의 구조에 맞추어 응답 데이터의 구조가 형성되므로 같은 필드에 대한 여러 쿼리를 전송할 경우 이름이 겹치는 문제가 발생할 수 있습니다.
{
User(id: "1") {
name
}
User(id: "2") {
name
}
}
이 같은 경우 서버에서 오류를 발생 시킵니다. 이러한 쿼리를 전송 하려면 Alias를 사용해야 합니다.
{
first: User(id: "1") {
name
}
second: User(id: "2") {
name
}
}
반환된 결과
{
"first": {
"name": "Alice"
},
"second": {
"name": "Sarah"
}
}