Skip to content

Latest commit

 

History

History
62 lines (53 loc) · 1.72 KB

검증.md

File metadata and controls

62 lines (53 loc) · 1.72 KB

validation

  • 타입 시스템을 사용하면 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 을 쿼리합니다.
    • 상황에 따라서 강제 해줘야 하는 필드를 다르게 해주고 싶을 때, 어떻게 해야할까?