GraphQL과 REST API를 함께 사용하는 경우, 어떻게 REST API를 wrapping 할지를 간단히 알아본다.
GraphQL 서버에서 다른 서버로 데이터 요청을 한 뒤, 해당 정보에 대하여 처리하는 것이다.
여기선 node-fetch를 사용하여 YTS API에 요청을 보낸다.
database를 구축하기 위하여 YTS API로 요청하기
기존의 db.js에 작성한 임의의 값이 아닌, API 요청 응답값을 기준으로 database를 구축한다.
// API를 요청하는 URL const API\_URL = 'https://yts.lt/api/v2/list\_movies.json'; // URL endpoint인 limit과 rating을 인자로 받는 함수 // limit은 불러올 데이터의 개수, rating은 불러올 데이터의 점수 정보에 대한 것 import fetch from "node-fetch"; const API_URL = "https://yts.lt/api/v2/list_movies.json"; export const getMovies = (limit, rating) => { let REQUEST_URL = API_URL; if (limit > 0) { REQUEST_URL += `?limit=${limit}`; } if (rating > 0) { REQUEST_URL += `&minimum_rating=${rating}`; } console.log(REQUEST_URL); return fetch(`${REQUEST_URL}`) .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;
스키마
YTS API를 사용했을 경우 받게 될 데이터의 형식에 맞게 스키마를 작성해주자.
schema.graphql
type Movie { title: String! id: Int! rating: Float! summary: String language: String medium_cover_image: String } type Query { movies(limit: Int, rating: Float): [Movie]! }
요청
rating이 7.3 이상인 것에 대하여 3개의 영화 정보와 이미지만 불러와보자.
query{ movies(limit:3, rating: 7.3){ rating title medium_cover_image } }
응답
{ "data": { "movies": [ { "rating": 7.4, "title": "Sister Aimee", "medium_cover_image": "https://yts.lt/assets/images/movies/sister_aimee_2019/medium-cover.jpg" }, { "rating": 7.3, "title": "Elena", "medium_cover_image": "https://yts.lt/assets/images/movies/elena_2011/medium-cover.jpg" }, { "rating": 7.9, "title": "Ivan the Terrible, Part II", "medium_cover_image": "https://yts.lt/assets/images/movies/ivan_the_terrible_part_ii_1958/medium-cover.jpg" } ] } }
여기까지 GraphQL이 타 API를 어떻게 감싸고 사용할 수 있는지 간단하게 알아볼 수 있었다.
다음 글에서는 여기에서 조금 더 GraphQL API를 확장해보자.
GraphQL - Apollo react 앱 만들기 (1) (0) | 2019.10.02 |
---|---|
GraphQL과 YTS API 사용하기 (2) (0) | 2019.10.01 |
GraphQL API 만들어보기 (3) (0) | 2019.09.30 |
GraphQL API 만들어보기 (2) (0) | 2019.09.30 |
GraphQL의 핵심 개념 (0) | 2019.09.27 |
댓글 영역