아폴로클라이언트 -> 아폴로서버 -> 구문분석 -> 리졸버 -> 값리턴
type User {
status: String!
success: Boolean!
error: String!
}
id 와 username 을 반환하는 타입지정
Query {
login(username: String! password: String!):
User
}
type Mutation {
addBook(title: String, author: String):Book
}
addBook 이라는 리졸버는 type Book 이라는 결과값을 받응
아폴로클라이언트 에서 gql로 지정하여 useQuery 또는 useLazyQuery 등으로 쿼리를 날림
//client`
query EventList {
upcomingEvents {
name
date
location {
name
weather {
temperature
description
}
}
}
}
//server
type Query {
upcomingEvents: [Event!]!
}
type Event {
name: String!
date: String!
location: Location
}
type Location {
name: String!
weather: WeatherInfo
}
type WeatherInfo {
temperature: Float
description: String
}
mutation updateMyUser {
updateUserEmail(id: 1, email: "jane@example.com"){
id
name
email
}
}
클라이언트에서 쿼리를 보내면 해당 리졸버를 실행하고 리졸버의 결과값을 클라이언트에 리턴한다.
서버로 부터 요청이 이루어지고 예기치 오류를 대비하여 항상 일관된 값을 전달하는게 중요
interface MutationResponse {
code: String!
success: Boolean!
message: String!
}
type UpdateUserEmailMutationResponse implements MutationResponse {
code: String!
success: Boolean!
message: String!
user: User
}
응답 JSON
{ "data": { "updateUser": { "code": "200", "success": true, "message": "User email was successfully updated", "user": { "id": "1", "name": "Jane Doe", "email": "jane@example.com" } } } }
\
code는 상태값이며
success 는 처리결과의 성공유무
message 는 처리 결과의 메세지이며 클라이언트 측에서 ui로 쓰일수 있다.