GraphQL 2일차
#0.5 Creating Queries with Arguments
- Argument를 보낼 때 처음 보내는 인자는 현재 object를 보내는 object이다.
- id를 통해 이름을 받아온다.
//resolvers.js
import { people, getById } from "./db";
const resolvers = {
Query: {
people: () => people,
person: (_, { id }) => getById(id)
}
};
export default resolvers;
//db.js
export const getById = id => {
const filteredPeople = people.filter(person => person.id === String(id));
return filteredPeople[0];
};
//schema.graphql
type Person{
id: Int!,
name: String!,
age: Int!,
gender: String!
}
type Query {
people: [Person]!
person(id: Int!): Person
}
#0.6 Defining and Creating Mutations
- Mutation은 Database의 상태가 변할 때 사용된다.
//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!
}
//db.js
let movies = [
{
id: 1,
name: "Black Widow",
score: 9
},
{
id: 2,
name: "Cruella",
score: 8
},
{
id: 3,
name: "Japan Guy",
score: 2
}
];
export const getMovies = () => { return movies };
export const getById = id => {
const filteredMovie = movies.filter(movie => movie.id === id);
return filteredMovie[0];
};
export const addMovie = (name, score) => {
const newMovie = {
id: movies.length + 1,
name,
score
}
movies.push(newMovie);
return newMovie;
}
//resolvers.js
import { getMovies, getById, addMovie } from "./db";
const resolvers = {
Query: {
movies: () => getMovies(),
movie: (_, { id }) => getById(id)
},
Mutation: {
addMovie: (_, { name, score }) => addMovie(name, score)
}
};
export default resolvers;
#0.7 Delete Mutation
- "db.js"파일에 delete 함수를 만들고 "schema.graphql"과 "resolvers.js"파일의 Mutation에 추가해준다.
//schema.graphql
type Mutation{
addMovie(name: String!, score: Int!): Movie!
deleteMovie(id: Int!): Boolean!
}
//db.js
export const deleteMovie = id => {
const cleanedMovie = movies.filter(movie => movie.id !== id);
if (movies.length > cleanedMovie.length) {
movies = cleanedMovie;
return true;
} else {
return false;
}
}
//resolvers.js
Mutation: {
addMovie: (_, { name, score }) => addMovie(name, score),
deleteMovie: (_, { id }) => deleteMovie(id)
}
#0.8 Wrapping a REST API with GraphQL
- REST API로 받은 것을 GraphQL로 활용할 수 있다.
- 오래된 서버를 가지고 있거나 GraphQL을 넣을 수 없을 때 사용하는 방법이다.
- YTS API를 이용한다.
- 이제 내 메모리가 아닌 api로 영화 정보를 가져온다.
yarn add node-fetch
를 통해 fetch를 추가해준다.- "schema.graphql"과 "resolvers.js"파일의 movie를 api에서 받아온 값에 맞게 바꿔준다.
//schema.graphql
type Movie{
id: Int!,
title: String!
rating: Float!
summary: String!
language: String!
medium_cover_image: String!
}
type Query {
movies(limit: Int, rating: Float): [Movie]!
}
//db.js
import fetch from "node-fetch";
const API_URL = "https://yts.mx/api/v2/list_movies.json?";
export const getMovies = (limit, rating) => {
let REQUEST_API = API_URL;
if (limit > 0) {
REQUEST_API += `limit=${limit}`;
}
if (rating > 0) {
REQUEST_API += `&minimum_rating=${rating}`;
}
return fetch(REQUEST_API)
.then(res => res.json())
.then(json => json.data.movies);
};
//resolvers.js
import { getMovies } from "./db";
const resolvers = {
Query: {
movies: (_, { limit, rating }) => getMovies(limit, rating)
}
};
export default resolvers;
Author And Source
이 문제에 관하여(GraphQL 2일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pjoon357/GraphQL-2일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)