[GraphQL] Query, Mutation, Resolver

jw·2022년 11월 23일
0

GraphQL

목록 보기
2/4
post-thumbnail

Query란?

DB에게 특정한 데이터를 보여달라는 Client의 요청이다.

const typeDefs= gql`

  type Movie {
    title: String
    year: Int
  }

  type Query {
    movies: [Movie]
    movie: Movie
  }

`;

타입을 정의해주는 곳 typeDefs에서 Movie타입Query타입을 정의한 코드

  1. Query타입은 movies와 movie로 구성된다.
    -movies는 Movie를 담은 배열을 반환하고 movie는 Movie를 반환한다.
  2. Movie타입은 title과 year로 구성된다.
    -title은 String타입이고 year은 Integer타입이다.

Mutation이란?

Mutation은 CRUD중 Create, Update, Delete를 당담하는 Query문이다.

const typeDefs = gql`
  type Movie {
    title: String
    year: Int
  }
  type Query {
    movies: [Movie]
    movie: Movie
  }

  type Mutation {
    createMovie(title: String!, year: Int): Boolean
    deleteMovie(title: String!): Boolean
  }
`;

typeDefs에서 Mutation타입을 정의한 코드다.

  1. createMovie
    -String타입의 title과 Int타입의 year를 인자로 갖는다.
    -title은 필수 인자
    -return 타입: Boolean

  2. deleteMovie
    -String타입의 title을 인자로 갖는다.
    -title은 필수 인자
    -return 타입: Boolean


Resolver란?

resolver란 schema에서 정의된 동일한 유형의 Data 또는 해당 Data에 관한 promise를 반환하는 함수이다. 실제로 실행하는 역할을 한다고 보면된다.

resolver는 4개의 인자를 받을 수 있다.

FunctionName: (parent, args, context, info) => data;

parent: 부모 resolver에서 반환된 객체
args: field에 전달해야 될 인수를 포함한 객체
(context, info는 지금 단계에선 스킵^q^;)

const resolvers = {
  
  Query: {
    movies: () => [],
    movie: () => ({ title: "오이시쿠나레", year: 2022 }),
  },
  
  Mutation: {
    createMovie: (_, { title, year }) => {
      console.log(title, year);
      return true;
    },
  },
  
};

resolver에서 Query와 Mutation이 실행할 내용을 정의한 코드다.

  1. Query
    -movies는 빈 배열을 반환
    -movie는 { title: "오이시쿠나레", year: 2022 }을 반환
  2. Mutation
    -createMovie는 {title, year}를 args로 갖는다.
    -인자 title, year을 console출력한다.

Apollo Server Setting

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

Apollo에서 제공해주는 Query IDE툴 playground에서 코드를 테스트해보자!

Query

query{
	query_name{
    	arg1,
        arg2,
        ...
    }
}

Mutation

mutation{
	mutation_name(arg1:_, arg2:_)
}

profile
다시태어나고싶어요

0개의 댓글