반응형
관련사이트
https://www.npmjs.com/package/@apollo/server#apolloserver
준비
해당 폴더에서 yarn init
다운로드
yarn add grahql
yarn add @apollo/server
package.json 파일에 module 설정 후 import
import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
// The GraphQL schema
// 쿼리에 대한 타입을 적겠다 라는 의미
const typeDefs = `#graphql
type Query {
hello: String
}
const resolvers = {
Query: {
hello: () => {
return 'hello'
}
}
}
const server = new ApolloServer({
typeDefs : typeDefs, // 스웨거 부분
resolvers: resolvers// API 부분
})
// 기본 포트번호 4000
startStandaloneServer(server)
// nodemon 설치를 또 해야함으로
node index.js // 서버실행
graphql은 cors가 기본 내장되어있다
Graphql의 특징
- api를 만들게 되면 docs를 꼭 같이 만들어야한다
그렇지 않는 경우 api 실행이 되지 않는다 - 기본 포트는 4000번이다
매개변수
API를 호출 시 데이터를 받는 매개변수가 있다
- parent
Front에서 Backend로 요청 시 데이터는 Argument로 진행되나
back에서 back으로 전달 시 parent로 전달된다 - argument
데이터가 전달되는 주로 사용하는 객체이다
express에서 res.body 문법이 graphql에선 args.메서드명 식으로
진행한다 - context
response와 request 데이터를 담는 객체이다
추출방법 : context.req , context. - info
graphql의 기본 정보와 기타 정보들이 들어있는 객체
type
GraphQL에서 type을 정의해야 한다
마치 레스토랑에 메뉴판과 같다고 보면 된다
레스토랑에 가면 메뉴판에 어떤 음식이 있는지, 각 음식의 구성요소가
어떤 것 인지 적혀있는데, GraphQL type도 비슷하다
이 스키마는 서버에서 사용할 수 있는 데이터의 형태
와 구조
를 정의한다
만약 Book이라는 타입을 만들었을떼ㅐ, 책에 주로 제목/저자/출판년도 등의
정보가 있다, 타입으로 정의한다면 다음과 같다
type Book {
title: String
author: String
publishedYear: Int
}
기본 타입은 String, Int, Float, Boolean, ID 등이 있다
ID는 고유 식별자를 나타낸다
- Nullable Types : 필드가 null값을 가질 수 있는지 여부를 정의
- input type : 클라이언트가 서버에 데이터를 보낼 때 사용하는
객체인걸 정의하기 위해 사용된다, 주로 뮤테이션에서 데이터를 생성하거나
수정할 때 사용된다
일반적인 Type은 데이터를 읽기 위한 구조를 정의한 거라면
input타입은 데이터를 쓰기 위한 구조를 정의한다
즉 클라이언트가 서버에 데이터 전송 시 어떤 형태로 보내야하는지
명시하는 것 이다
input 타입을 좀더 알아보자
예를 들어 새로운 책을 추가하려는 뮤테이션을 만든다고 가정할 때
클라이언트가 책의 제목/저자/출판년도 등의 정보를 서버에 전달해야 한다
이를 위해 다음과 같이 정의할 수 있다
input CreateBookInput {
title: String!
author: String!
publishedYear: Int
}
여기서 ! 의 역할은 해당 필드가 필수임을 나타낸다.
title : String! 은 제목이 반드시 있어야 된다는걸 의미한다
input타입을 사용하면 클라이언트가 서버에 데이터 전달 시 필요한 정보의 형식과
필수 여부를 명확히 정의할 수 있어 데이터 전송과 처리가 더 체계적으로 이루어 질 수 있다
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
반응형
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Nᴏᴅᴇ.Jꜱ' 카테고리의 다른 글
async & await 메모 (0) | 2024.02.01 |
---|---|
Axios 통신 (0) | 2024.02.01 |
Swagger가 뭔가요 (0) | 2024.02.01 |
RestAPI & import 간단 메모 (0) | 2024.02.01 |
cors , 꼭 알고 가야한다 (0) | 2024.02.01 |