Search

Mutation Type

Mutation 타입이란?

Mutation Type은, QueryType과는 달리, POST 및 PUT, DELETE과 같은 서버측의 DB 내용을 수정한다거나 새로 데이터를 추가하거나 하는 행위(Mutation)의 타입을 알려주는 겁니다. 자, 아까 타입 정의 코드에 추가해봅시다.
const typeDefs = gql` type User { id: ID username: String } type Tweet { id: ID text: String author: User } type Query { allTweets: [Tweet] // 여기 이 부분이 바로 Arguments에 해당합니다. tweet(id: ID): Tweet } // this line type Mutation { postTweet(text: String, userId: ID): Tweet deleteTweet(id: ID): Boolean } `;
GraphQL
복사
그렇다면 어떻게 mutation을 사용하나요?
저는 아폴로 서버를 로컬에서 돌리고 있습니다.
mutation { postTweet(text: "Hello, first tweet", userId: "1") { text } }
GraphQL
복사
이런 식으로 작성을 해주시면 됩니다.

Non Nullable Fields

다음 타입 정의 스키마를 살펴봅시다.
const typeDefs = gql` type User { id: ID username: String } type Tweet { id: ID text: String author: User } type Query { allTweets: [Tweet] tweet(id: ID): Tweet } type Mutation { postTweet(text: String, userId: ID): Tweet deleteTweet(id: ID): Boolean } `;
GraphQL
복사
우리(개발자들)는 데이터를 주고받을때, Null값에 대해 예민하게 생각합니다.
Null값은 연산이 안 되기도 하고, 코드의 맥락을 파악하기도 쉽지 않기도 하고.. 다양한 문제들을 발생할 여지가 많습니다
서버와 통신을 해서 데이터를 얻어올 때, null값을 줄 가능성은 적지 않습니다. 그렇기에 우리는 이건 null값이면 안돼!라는 것을 명시해줄 필요가 있습니다 그렇다면 어떻게 해야할까요? 윗 코드를 변형하겠습니다.
const typeDefs = gql` type User { id: ID! username: String! } type Tweet { id: ID! text: String! author: User! } type Query { // allTweets는 항상 배열을 반환해야합니다. // 그리고, Tweet!은 배열 내 원소가 있다면 원소의 타입은 항상 Tweet이어야한다.를 의미합니다.(원소가 없어도 괜찮음) allTweets: [Tweet!]! // 이상한 id(ex: "1111111")이면, 트윗이 없을 수도 있으니 nullable tweet(id: ID): Tweet } type Mutation { // argumentsStringID을 사용, Tweet만을 반환 postTweet(text: String!, userId: ID!): Tweet! // Boolean 값만을 반환 deleteTweet(id: ID!): Boolean! } `;
GraphQL
복사
이렇게 Scalar Type 뒤에 "!"를 붙임으로써, 해당 데이터는 해당 타입만이어야한다라고 정의해주면 됩니다.