[GraphQL] GraphQL 구조
GraphQL과 REST API 의 차이
REST API 는 HTTP 통신의 METHOD (Get,Post,Delete,Post...etc)와 URI를 이용해 서버와 필요한 통신을 수행한다. 그에 반해 GraphQL은 하나의 URI에 한가지 Method (Post)를 이용해 서버와 통신을 하게되는데, 그렇다고 GraphQL이 정보를 조회하는 작업만 수행할 수 있는 것은 아니다
GraphQL은 한가지 Method와 URI를 이용하는데신, Query를 이용해 정보를 조회하고, Mutation을 이용해 데이터를 수정할 수 있다. 또한 Subscription이라는 개념을 이용해 실시간 업데이트를 구현할 수 있다.
Query 를 이용해 데이터 조회.
기본형식
query HeroName{
hero {
name
}
}
위의 코드와 아래 코드는 같은 기능을 수행한다.
{
hero {
name
}
}
Query 메소드를 통해 위와 같이 필요한 정보만 불러올 수 있다. 요청의 기본값(default) 가 Query이므로 생략이 가능하지만, 모호한 코드 사용을 최대한 지양해야하기 때문에 메소드와 쿼리네임을 작성해주는 것이 좋다
Argument (전달인자)
{
human(id: "1000") {
name
height
}
}
(id: "1000") 부분과 같이 Argument 를 이용해 특정한 정보(원하는 데이터) 만 받아 올 수 있다.
Aliases (가명)
필드 이름을 중복해서 사용할 수 없으므로, 필드이름을 중복으로 사용해야 할 때는 별명을 붙여서 쿼리를 한다.
// 이렇게 중복으로 쿼리할 수 없음
{
hero(episode: EMPIRE) {
name
}
hero(episode: JEDI) {
name
}
}
// 이런식으로 별명을 붙혀 사용
{
empireHero: hero(episode: EMPIRE) {
name
}
jediHero: hero(episode: JEDI) {
name
}
}
Variables 변수
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
고정된 인수를 이용하여 쿼리하는 것도 가능하지만, 실제 앱을 이용할때는 변수를 사용해 쿼리하는경우가 대다수이다.
이럴때는 $변수이름 : 타입 의 형태로 사용할 수 있다.
Nullable
type Query {
allTweets: [Tweet!]!
tweet(id: ID!): Tweet
ping: String!
}
nullable 은 Null 값을 허용하는지에 대한 것이다. ! 를 붙혀서 사용하게되는데 !을 붙히지 않으면 해당 필드는 Nullable field가 되어 null 값을 가질 수 있다.
위의 코드를 보면 query로 allTweets를 요청하면 Tweet을 담고있는 배열[] 을 반드시 리턴하도록 설정되어있다. 이렇게 설정을 해놓게되면 서버에서 null값이 날아오지않고 반드시 Tweet을 담고있는 배열을 응답하게된다.
이어서 GraphQL을 이용해 직접 API서버를 만들면서 더 공부해보고자한다
https://jobkaehenry.tistory.com/25
[GraphQL] Apollo를 이용해 GraphQL API서버 만들기 - Setup
개발자들사이에서는 백문이 불여일타 라는 말이 있다. 100번 보는것 보다 한번 코드를 쳐보는게 더 낫다고 장난식으로 하는 말인데 실제로 코드를 눈으로만 보고 이해했다고 개발에서 사용할 수
jobkaehenry.tistory.com