-
타입 시스템을 사용하면 GraphQL 쿼리가 유효한지 여부를 미리 알 수 있습니다. 이를 통해 런타임 검사에 의존하지 않고도 유효하지 않은 쿼리가 생성되었을 때 서버와 클라이언트가 효과적으로 개발자에게 알릴 수 있습니다. (gql타입 시스템이 validation하는 시점은? 런타임아닌가?)
-
recursive를 못한다는게 이 뜻인듯.
- 아래의 경우 무한한 결과를 초래할 수 있으므로 프래그먼트가 자기자신을 참조하거나 싸이클을 만들 수 없습니다! 아래는 명시적으로 세단계 중첩은 없지만 위와 동일한 쿼리입니다.
{
hero {
...NameAndAppearancesAndFriends
}
}
fragment NameAndAppearancesAndFriends on Character {
name
appearsIn
friends {
...NameAndAppearancesAndFriends
}
}
# INVALID: primaryFunction does not exist on Character
{
hero {
name
primaryFunction
}
}
{
hero {
name
...DroidFields
}
}
fragment DroidFields on Droid {
primaryFunction
}
{
hero {
name
... on Droid {
primaryFunction
}
}
}
- primaryFunction 이 Character 의 필드가 아니기 때문에 이 쿼리는 유효하지 않습니다. Character 가 Droid 인 경우에만 primaryFunction 을 가져오고 그 외엔 그 필드를 무시하는 방법이 있어야합니다. 이전에 소개한 프래그먼트을 사용하여 이를 수행할 수 있습니다. Droid 에 정의된 프래그먼트를 선언하여, 정의된 곳에서만 primaryFunction 을 쿼리합니다.
- 상황에 따라서 강제 해줘야 하는 필드를 다르게 해주고 싶을 때, 어떻게 해야할까?