이 글은 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"
}
]
}
}