GraphQL

GraphQL 간단한 서버 만들기 2

dlwltn98 2023. 1. 22. 12:46

resolvers

- resolvers들은 하나의 객체가 됨

- 객체는 우리의 타입 정의와 같은 형태를 가져야 함

- 각 유형의 각 필드는 GraphQL 서버 개발자가 제공하는 resolvers라는 기능에 의해 지원됨

- typeDefs에 정의된 애들이 resolvers의 함수를 거쳐감

const resolvers = {
    Query: {
        allTweets() {
            return tweets;
        },
        tweet(root, args) {  
            console.log(args);
            return null;
        }
    }
}

* tweet은 function이 됨 , null 반환

* tweet(root, args) 의 root 자리는 고정, tweet(_, args) 이런식으로도 사용 가능

   args가 넘겨 받아야하는 파라미터

 

 

// 임시로 사용
let users = [{
      id: "1",
      firstName: "jisu",
      lastName: "lee"
  },
];

const typeDefs = gql`
    type User {
        id: ID!
        firstName: String!
        lastName: String!
        fullName: String!
    }
`


const resolvers = {
    Query: {
        allUsers() {
            console.log("all users called!!");
            return users;
        }
    },
    User: {
        fullName() {
            return "hello!";
        }
    }
}

- data에는 없지만 Graphql이 작동하는 방식에 따라 fullName resolvers 발견해 호출하고 결과를 받음

- 아래와 같이 fullName을 요청하면 fullName의 값으로 "hello!"를 출력함

{
  allTweets {
    author {
      fullName
    }
  }
}

 

 

root argument

const resolvers = {
    Query: {
        allTweets() {
            return tweets;
        },
        tweet(root, {id}) {
            return tweets.find((tweet) => tweet.id === id);
        },
        allUsers() {
            console.log("all users called!!");
            return users;
        }
    },
    User: {
        fullName(root) {
            console.log("fullName called");
            console.log(root);
            return "hello!";
        }
    }
}
// Result 
all users called!!
fullName called
{ id: '1', firstName: 'jisu', lastName: 'lee' }
fullName called
{ id: '2', firstName: 'abc', lastName: 'kim' }
// resolvers의 User fullName() 수정
    User: {
        fullName({firstName, lastName}) {
            return `${firstName} ${lastName}`;
        }
    }

- resolver의 첫번째 argument에서는 root query를 찾을 수 있음

 

 


+ 어떤 식으로 사용하는지는 알겠으나 이론적인 부분 공부가 필요함

 

 

 

출처 :

https://graphql.org/learn/execution/#root-fields-resolvers

https://www.apollographql.com/docs/apollo-server/data/resolvers/#resolver-arguments

'GraphQL' 카테고리의 다른 글

GraphQL 간단한 서버 만들기 3  (0) 2023.01.23
GraphQL 간단한 서버 만들기 1  (1) 2023.01.19
GraphQL 이란?  (0) 2023.01.19