GraphQL 영화 API 만들기 (2) - Query & Mutation
Query & Mutation
Query
DB에서 어떤 데이터를 가져올 정보에 대한 설명(데이터).
type Query {
people: [Person]!
person(id: Int!): Person
}
type Person {
id: Int!
name: String!
age: Int!
gender: String!
}
Mutation
DB에 어떤 변화를 가져다 줄 지에 대한 설명
type Mutation {
addMovie(score: Int!, name: String!): Movie!
deleteMovie(id: Int!): Boolean!
}
GraphQL 작동 원리
1.
Query OR Mutation 요청 => GraphQLServer in “index.js”2.
GraphQLServer => GraphQL Resolvers3.
GraphQL Resolvers 에 2가지 args 전달- Object : 추후 사용 (현재 몰라도 상관 X)
- Args : User가 전달할 수 있는 변수
세부 사용 방법
꼭 순서대로 파일을 수정할 필요는 없지만 3가지 파일
모두 수정해주어야 한다.
Schema.graphql 수정
Schema.graphql
는 데이터의 형태가 이럴 것이다라고 미리 정해주는 검문소 매뉴얼
이다. 해당 데이터 타입에 대한 정보를 담고 있다. 따라서 이 곳에 먼저 data의 type
에 대한 코드들을 추가해야한다.
resolvers.js 수정
db.js
파일에 어떤 함수
에 어떤 변수
들을 전달할지 연결해주는 곳이다.
db.js 수정
세부적으로 어떤 함수(알고리즘)을 실행
할지 서술하는 코드들이 작성되있는 곳이다.
사용 예시
아래 코드들은 영화 데이터 Array에 새로운 정보를 추가하는 코드를 작성한 예시이다.
Schema.graphql 수정
addMovie의 args
는 score 그리고 name이고 type
은 Movie이다. 라는 내용의 코드를 작성한 것이다.
type Movie {
id: Int!
name: String!
score: Int!
}
type Mutation {
addMovie(score: Int!, name: String!): Movie!
}
resolvers.js 수정
db.js
파일에서 addMovie라는 함수에는 (_, { name, score })
라는 변수가 전달되고 이 때 name,score만 받아서 사용한다. 라는 내용의 코드를 작성한 것이다.
import { addMovie } from "./db";
const resolvers = {
Mutation: {
addMovie: (_, { name, score }) => addMovie(name, score),
},
};
export default resolvers;
db.js 수정
addMovie라는 함수는 name,score이라는 변수를 받아서 movies Array에 새로운 Object를 추가한다. 라는 내용의 코드를 작성한 것이다.
export const addMovie = (name, score) => {
const newMovie = {
id: `${movies.length + 1}`,
name,
score,
};
movies.push(newMovie);
return newMovie;
};