🌸 GraphQL

GraphQL 로 영화 API 만들기(4)

ji-hyun 2022. 2. 9. 03:35
// db.js
let movies = [
  {
    id: 0,
    name: "Star Wars",
    score: 1,
  },
  {
    id: 1,
    name: "Avengers",
    score: 8,
  },
  {
    id: 2,
    name: "Logan",
    score: 2,
  },
  {
    id: 3,
    name: "The Godfather I",
    score: 99,
  },
];

export const getMovies = () => movies;

export const getById = (id) => {
  const filteredMovies = movies.filter((movie) => movie.id === id);
  return filteredMovies[0];
};

export const deleteMovie = (id) => {
  const cleanedMovies = movies.filter((movie) => movie.id !== id);
  if (movies.length > cleanedMovies.length) {
    movies = cleanedMovies;
    return true;
  } else {
    return false;
  }
};

export const addMovie = (name, score) => {
  const newMovie = {
    id: `${movies.length + 1}`,
    name,
    score,
  };
  movies.push(newMovie);
  return newMovie;
};

 

영화에 대해서 db 를 만들어보았다.

 

 

 

 

 

 

 

// resolvers.js
import { getMovies, getById, addMovie, deleteMovie } from "./db";

const resolvers = {
  Query: {
    movies: () => getMovies(),
    movie: (_, { id }) => getById(id),
  },
  Mutation: {
    addMovie: (_, { name, score }) => addMovie(name, score),
    deleteMovie: (_, { id }) => deleteMovie(id),
  },
};

export default resolvers;

 

resolvers 에 추가적으로 Mutation 을 정의해보았다.

참고로 Mutation 은 데이터베이스 상태가 변할 때 사용되는 것이다.

그러나 이대로 yarn start 를 하게 되면 resolvers 에는 정의되어 있지만 schema 에서는 정의되어 있지 않다고 뜬다. 그래서 스키마에도 정의해줄 것이다.

 

 

 

 

 

 

 

// schema.graphql
type Movie {
  id: Int!
  name: String!
  score: Int!
}

type Query {
  movies: [Movie]!
  movie(id: Int!): Movie
}

type Mutation {
  addMovie(name: String!, score: Int!): Movie!
  deleteMovie(id: Int!): Boolean!
}

 

 

 

 

 

 

 

 

이제 GraphQL 에게 내 Mutation 이나 Query 를 요청하길 원한다면 그것들을 type Query 와 type Mutation 에 넣어야 한다.

 

 

 

 

 

addMovie 는 Movie 를 필수적으로 리턴하기 때문에 하위영역을 지정해주어야 하고, 

deleteMovie 는 불린값을 리턴하기 때문에 이렇게만 지정해주면 된다.

 

 

 

 

 

 

 

 

 

정리

 

 

내가 어떤 함수를 가지고 있는지 필수사항은 뭔지 이런 것들은 그래프 큐엘에게서 제공된다.

장고는 이런 것들을 알려주지 않는다.

어떤 REST API 도 이런 것들을 알려주지 않는다.

 

 

 

 

 

 

 

지금까지 우리는 영화 정보를 받을 때 Query 를 했고

Database 의 상태를 바꾸기 위해서 Mutation 을 했다.

 

 

다음 시간에는 GraphQL 을 가지고 어떻게 REST API 를 감싸는지 배울 것이다.

왜냐하면 많은 개발자들이 GraphQL 을 사랑하지만 지금 가지고 있는 백엔드는 REST API 인 경우가 많기 때문

그래서 어떻게 감싸는지 보여주겠다.