Node.js를 이용해, 데이터베이스에 접근하는 나만의 명령어를 만들고 (Query, Mutation, TypeDefs, resolvers )
CRUD 요청, 응답을 더 효과적으로 처리할 수 있게 해주는 API 이다.
rest api 의 한계점이 분명히 존재하기 때문이다
rest api 는 원하는 데이터보다 쓸데없이 더많은 데이터를 가져와야만 하기도하고(over-fetching)
특정 데이터를 요청하기위해 여러번의 요청을 해야하는상황이 나오기도 한다(under-fetching)
자 이제 graphql 을 써보자
먼저 rest api의 get에 해당하는 query 를 사용해보도록 하자
GraphQL, ApolloServer 설치
npm i graphql apollo-server
// graphql : 그래프큐엘을 사용하기 위한 패키지
// apollo-server : 아폴로 서버를 사용하기 위한 패키지
const { ApolloServer, gql } = require("apollo-server");
const typeDefs = gql`
// Book type을 설정해주고
type Book {
id : Int
title: String
author: String
}
// 우리가 쓸 쿼리문의 books 는 Book 타입을 배열로 보내주는 형식 이다! 라고 말해줌
type Query {
books: [Book]
}
`;
const books = [ { id: 1, title: 'The Awakening', author: 'Kate Chopin', }, { id: 2, title: 'City of Glass', author: 'Paul Auster', }, ];
const resolvers = {
Query: {
books: () => books,
},
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
실행시켜보면~
localhost:4000
잘 된다.
전체코드
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
const { ApolloServer, gql } = require("apollo-server");
const typeDefs = gql`
type Book {
id : Int
title: String
author: String
}
type Query {
books: [Book]
}
`;
const books = [
{
id: 1,
title: 'The Awakening',
author: 'Kate Chopin',
},
{
id: 2,
title: 'City of Glass',
author: 'Paul Auster',
},
];
const resolvers = {
Query: {
books: () => books,
},
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
app.get("/", function (req, res) {
res.send("Hello graphql----");
});
app.listen(3000, function () {
console.log("App started");
});