[git] Graphql 2
Usage
Schema
type
type -> 다루게 될 객체에 대한 type이다. java로 치면 일종의 class.
Query / Mutation
- Query 는 일반적인 rest api의 get ? 아니면 select?
- Mutation 은 rest api로 치면 post / patch ?
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;
- parent :
- arg :
- context
- info
#그래프큐엘/Apollo-Server