REST API은 URL의 집합입니다.
/users/:id<br/>
/features/:id
Plain Text
복사
같은 맥락에서, GraphQL API는 Type의 집합이라고 생각하면 됩니다. 타입을 알려주지 않으면, 오류가 생길 겁니다. GraphQL에서의 query는, REST API의 Get Request를 만드는 것과 같다는 것을 명심해주세요
GraphQL server에게 서버에 있는 데이터들의 타입을 미리 설명해줘야합니다.
Scalar Type(기본 제공 타입)
GraphQL에 내장된 타입
•
String
•
Int
•
Float
•
Boolean
•
ID
◦
id값을 명시적으로 표시하기 위해 사용
◦
내부적으로는 String과 동일합니다
Schema(스키마)
관계형 데이터 베이스의 스키마를 떠올리면 됩니다. 마찬가지로, 데이터의 shape을 알려줘야합니다.
어쩌면 불편하다고 생각할 수 있지만, 안정성 면에서 나쁘지 않으며, 덕분에 어떤 데이터들이 들어오는지 auto-complete를 통해 편하게 알 수도 있기도 합니다.
// 스키마 사용방식은 다음과 같습니다.
// ``(백틱 : 오직 백틱만 쓰셔야 합니다)사이에 모든 내용이 들어가게 됩니다. 이는 SDL(Schema Definition Language)라고 부릅니다.
const typeDefs = gql`<이 곳>`
JavaScript
복사
SDL 등록이 의미하는바
const typeDefs = gql`
type Query {
text: String
hello: String
}
`;
JavaScript
복사
윗 내용은 REST API에서 GET url을 생성한 것과 같은 의미를 갖습니다. 사용자가 요청할 수 있도록 하고 싶은 모든 것은 type Query안에 작성되어야합니다.
기억하세요. Query라는 타입 안에 명시되어야 GET method를 수행하는 것과 같은 역할을 합니다
GET /text
GET /hello
Markdown
복사
윗 역할과 같은 것을 수행한다고 보시면 됩니다.
Arguments
경로를 세분화하다보면, REST API의 /tweets/:id처럼 사용자의 id에 따라 달라지는 요청들이 있습니다. 이는, 명시적으로 적어주는 게 아닌, 동적으로 들어와야하는 값인데, 미리 설정할 수 있는 값이 아니다보니, Arguments로 넘겨줘야합니다(마치, 함수의 인자처럼)
const typeDefs = gql`
type User {
id: ID
username: String
}
type Tweet {
id: ID
text: String
author: User
}
type Query {
allTweets: [Tweet]
// 여기 이 부분이 바로 Arguments에 해당합니다.
tweet(id: ID): Tweet
}
`;
JavaScript
복사
어떤 식으로 사용하나요?
arguments부분은 tweet(id: ${여기 이부분})에 해당합니다
// 아래 쿼리는 이것과 같습니다 : GET /api/.../tweet/:id
{
allTweets {
text
}
// 이렇게 id를 넣으면 :id 위치에 해당 숫자가 들어가는 셈이죠
tweet(id: "1") {
author {
id
username
}
}
}
JavaScript
복사

