이 글은 GraphQL Docs를 읽고 정리한 것입니다.
변경을 발생시키는 작업은 명시적으로 mutation을 통해 전송되는 것이 좋다
(앞서 정리한 query 타입의 경우 조회를 위한 것이다).
아래 예시의 경우 createReview 필드가 새로 생성된 리뷰의 stars 와 commentary 필드를 반환한다. 이 때, 전달되는 review 변수는 input object type이다.
쿼리
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
// variables
{
"ep": "JEDI",
"review": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
실행 결과
{
"data": {
"createReview": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
}
incrementCredits 뮤테이션을 보내면 첫 번째 요청이 완료된 다음 두 번째 요청이 완료 된다.hero 필드는 Character 타입을 반환하는데, 이 때 episode 인자에 따라 Droid 혹은 Human 타입을 반환하게 된다(유니언).primaryFunction 필드를 반환하고 타입이 Human이면 height 필드를 반환한다.쿼리
query HeroForEpisode($ep: Episode!) {
hero(episode: $ep) {
name
... on Droid {
primaryFunction
}
... on Human {
height
}
}
}
// variables
{
"ep": "JEDI",
}
실행 결과
{
"data": {
"hero": {
"name": "R2-D2",
"primaryFunction": "Astromech"
}
}
}
__typename을 요청해 객체 타입의 이름을 얻을 수 있다.search는 Human, Droid, Starship 중 하나인 유니언 타입을 반환한다. 이 때 __typename 필드가 없다면 클라이언트는 다른 타입을 구별하지 못한다.
쿼리
{
search(text: "an") {
__typename
... on Human {
name
}
... on Droid {
name
}
... on Starship {
name
}
}
}
실행 결과
{
"data": {
"search": [
{
"__typename": "Human",
"name": "Han Solo"
},
{
"__typename": "Human",
"name": "Leia Organa"
},
{
"__typename": "Starship",
"name": "TIE Advanced x1"
}
]
}
}