[GraphQL] schema 정리하기!

Joah·2022년 11월 15일
0

GraphQL

목록 보기
9/9

🛼 type Query

import { ApolloServer, gql } from "apollo-server";

const typeDefs = gql`
  type Feed {
    id: ID!
    text: String!
    creator: User!
  }
  type Query {
    allFeeds: [Feed]!
    feed(id: ID!): Feed
  }
`;

const server = new ApolloServer({ typeDefs });

server.listen().then(({ url }) => {
  console.log(`running on ${url}`);
});

type Query가 없다면 서버는 실행조차 되지 않았을 것이다.
type Query는 가장 기본이 되는 타입이고 graphql에서 필수적인 Query이다.

type Query에 작성된 모든 데이터, 필드는 사용자가 요청할 수 있다.


🛼 Scalar Type

graphql에서 기본적으로 제공하는 schema에 작성할 수 있는 5가지 타입인
Stirng, Int, Boolean, Float, ID가 있다.

🏝 scalar type이외에 타입을 위해 커스터마이징 하기

const typeDefs = gql`
  type User {
    id: ID!
    username: String
  }
  type Feed {
    id: ID!
    text: String!
    creator: User!
  }
  type Query {
    allFeeds: [Feed]!
    feed(id: ID!): Feed
  }
  type Mutation {
    postFeed(text: String, userId: ID): Feed!
    deleteFeed(id: ID): Boolean!
  }
`;

우리만의 type을 정의하기 위해서
type Feed라는 타입을 정의한다.
type Feed를 shape을 설명해준다.

  • id: ID
  • text: String
  • creator: User

🛼 타입 연결

const typeDefs = gql`
  type User {
    id: ID!
    username: String
  }
  type Feed {
    id: ID!
    text: String!
    creator: User!
  }
  type Query {
    allFeeds: [Feed]!
    feed(id: ID!): Feed
  }
`;
  • User라는 타입을 만들어서

  • type Feed에서 creator의 User 타입을 사용할 수 있다.


🛼 Mutation

type Query 같은 경우는 REST API의 GET request같은 개념이기 때문에 database나 서버에 아무런 영향을 미치지 않는다.

하지만 Mutation같은 경우는 데이터를 create, delete, update하기 request이기 때문에 database나 서버의 데이터를 변화시킬 수 있는 request이다.

const typeDefs = gql`
  type Mutation {
    postFeed(text: String, userId: ID): Feed!
    deleteFeed(id: ID): Boolean!
  }
`;

🛼 nullable field

기본적으로 타입에 느낌표를 붙이지 않으면 해당 데이터의 반환 값은 지정된 타입 또는 null이 반환된다. 즉, nullable field가 된다.

만약 해당 field가 null을 반환하지 않는다는 확실한 데이터라면 느낌표롤 붙여준다. 혹여나 database에서 반환값 또는 요청하는 데이터의 타입이 null이라면 에러를 뱉는다.

어떤 field가 required인지 확실하게 알려준다.
또한 field의 type을 확실하게 지정하여 non-nullable한 값을 명시한다.

profile
Front-end Developer

0개의 댓글