[GraphQL] Movie API 만들기(3)-Schema

bomhada·2022년 5월 8일
0

GraphQL

목록 보기
3/5
post-thumbnail

👾 GraphQl Playground

server를 생성했다면 nodemon이 서버가 정상적으로 작동 되고 있다는 메시지와 함께
서버의 링크를 알려주는데 그 링크로 윈도우를 띄워보면 playgound를 볼 수 있습니다.
강의 대로라면 localhost:4000으로 나와야하는데 저의 경우에는 0.0.0.0:4000/graphql이라는 링크가 나왔습니다. 갈길이 멀어서 아직 왜 그런지에 대해서는 해결하지 못 했습니다.

  • Playground는 garphql-yoga에 따라오는 것으로, Database를 테스트하게 해주는 곳이다.
    데이터 양이 많을 수록 기억하기도 어렵고, 찾기 힘들 수도 있을 경우 시각적으로 확인하기가 수월해집니다.
  • Query는 JSON data 같은 것인데 이것을 어디론가 보내는 것을 POST라고 합니다.
    그리고 서버가 받아야하기 때문에 항상 Query들, Mutation들을 POST로 보내야합니다.

👾 Extend the Schema(1)

resolver.js

const jennie = {
  name: "jennie",
  age: 20,
  gender: "female"
};

const resolvers = {
  Query: {
    person: () => jennie,
  }
}

export default resolvers;
  • 위의 예시와 같이 상단에 jennie라는 새로운 객체를 만들었습니다.
  • 그리고 Query를 person으로 변경하였고, jennie라는 객체를 리턴하도록 하였습니다.

schema.js

import { buildSchema } from "graphql";

const schema = buildSchema(`
  type Tia {
      name: String!
      age: Int!
      gender: String!
  }
  
  type Query {
    person: jennie!
  }
`);

export default schema;
  • Resolvers는 기본적으로 View같은 것이고, Schema는 어디로 갈지 정해주기 때문에 URLs 같은 것입니다.
  • 이미 정의된 세종류의 형식(Query ,Mutations, Subscription(설명))이 있습니다.
    Query를 관찰하고 뭐든 원하는 만큼 많은 형식을 만들 수 있습니다.

👾 Extend the Schema(2)

위의 person을 db파일로 분할해 작성해보겠습니다.
db.js

export const people = [
  {
    id: "0",
    name: "jennie",
    age: 20,
    gender: "female"
  },
  {
    id: "1",
    name: "rose",
    age: 20,
    gender: "female"
  },
  {
    id: "2",
    name: "lisa",
    age: 20,
    gender: "female"
  },
  {
    id: "3",
    name: "jisoo",
    age: 20,
    gender: "female"
  },
];

export const getById = id => {
  const filteredPeople = people.filter(person => person.id === +id);
  return filteredPeople[0];
}

resolver.js

import { people, getById } from "./db";

const resolvers = {
  Query: {
    people: () => people,
    person: (_, { id }) => getById(id),
  }
}

export default resolvers;

schema.js

import { buildSchema } from "graphql";

const schema = buildSchema(`
  type Person {
      id: Int!
      name: String!
      age: Int!
      gender: String!
  }
  
  type Query {
    people: [Person]!
    person(id: Int!): Person
  }
`);

export default schema;

0개의 댓글