상세 컨텐츠

본문 제목

GraphQL과 YTS API 사용하기 (1)

Programming/GraphQL

by 쌩우 2019. 9. 30. 17:51

본문

GraphQL과 REST API를 함께 사용하는 경우, 어떻게 REST API를 wrapping 할지를 간단히 알아본다.

GraphQL 서버에서 다른 서버로 데이터 요청을 한 뒤, 해당 정보에 대하여 처리하는 것이다.
여기선 node-fetch를 사용하여 YTS API에 요청을 보낸다.

  1. 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);
     };
     
    1. resolvers
      query에 대해서 동작할 함수를 resolvers에 정의해주자

    resolvers.js

    import { getMovies } from "./db";
    
    const resolvers = {
     Query: {
       movies: (_, { limit, rating }) => getMovies(limit, rating)
     }
    };
    export default resolvers;
    
  2. 스키마
    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]!
}
  1. 데이터 불러오기
    query를 통해 YTS API를 이용, 필요한 데이터를 가져와보자.

요청
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를 확장해보자.

'Programming > GraphQL' 카테고리의 다른 글

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

관련글 더보기

댓글 영역