[git] Graphql 2

Usage

Schema

type

type -> 다루게 될 객체에 대한 type이다. java로 치면 일종의 class.

Query / Mutation

Data Source

data를 가지고 있는 곳으로, database, api 등이 될 수 있다.

해당 클래스 내에, 들어오는 query가 요청하는 데이터를 fetching하는 메서드들을 추가한다.

이러한 메서드들은 앞서 schema를 기반으로 이루어진다.

const { RESTDataSource } = require('apollo-datasource-rest');

class LaunchAPI extends RESTDataSource {
  constructor() {
    super();
    this.baseURL = 'https://api.spacexdata.com/v2/';
  }
}

getAllLaunches 함수를 통해서 http get 을 호출하면, response를 받고, 이를 reducer를 통해서 값을 만들어서 반환해준다.

async getAllLaunches() {
  const response = await this.get('launches');
  return Array.isArray(response)
    ? response.map(launch => this.launchReducer(launch))
    : [];
}

launchReducer(launch) {
  return {
    id: launch.flight_number || 0,
    cursor: `${launch.launch_date_unix}`,
    site: launch.launch_site && launch.launch_site.site_name,
    mission: {
      name: launch.mission_name,
      missionPatchSmall: launch.links.mission_patch_small,
      missionPatchLarge: launch.links.mission_patch,
    },
    rocket: {
      id: launch.rocket.rocket_id,
      name: launch.rocket.rocket_name,
      type: launch.rocket.rocket_type,
    },
  };
}

query resolver

schema의 필드에 값을 채워주는 역할을 하는 함수.

client가 특정 필드에 대한 값에 query를 날리면, resolver 가 요청에 대한 값을 data source로 부터 가져온다.

가져온 값의 타입은

fieldName: (parent, args, context, info) => data;

#그래프큐엘/Apollo-Server