개요
RESTful API: N endpoints
GraphQL: 단일 endpoint
조회는 Query, 생성/수정/삭제는 Mutation 이라고 함
명시적 정의와 자유도
- 명시적 정의
- GraphQL은 서버 개발자에게 데이터 타입, 쿼리, 뮤테이션을 명시적으로 정의하도록 요구합니다.
이는 GraphQL 스키마에서 수행되며, 서버가 제공할 수 있는 데이터와 작업을 명확하게 정의합니다.
예를 들어, 서버 개발자는 사용자 데이터를 반환하는 getUser 쿼리와 사용자 데이터를 업데이트하는 updateUser 뮤테이션을 스키마에 정의할 수 있습니다.
- GraphQL은 서버 개발자에게 데이터 타입, 쿼리, 뮤테이션을 명시적으로 정의하도록 요구합니다.
- 클라이언트의 자유도 (Client Flexibility):
- 클라이언트는 서버에 정의된 스키마를 기반으로 데이터를 요청합니다.
- 필드 선택 (Field Selection):
-
- 클라이언트는 쿼리를 통해 필요한 필드만 선택할 수 있습니다. 예를 들어, 사용자 객체에 대한 쿼리를 만들 때, 클라이언트는 이름과 이메일만 요청할 수 있으며, 다른 필드는 무시할 수 있습니다. 이는 네트워크 트래픽을 최적화하고, 필요한 데이터만 가져오도록 할 수 있습니다.
- 중첩 및 복잡한 쿼리 (Nested and Complex Queries):
- 또한, 클라이언트는 중첩된 쿼리를 생성하여 관련된 객체와 필드를 한 번의 요청으로 가져올 수 있습니다. 이는 데이터의 관계와 구조를 유연하게 표현할 수 있으며, 복잡한 데이터 요청을 단순화할 수 있습니다.
- 응답 구조의 맞춤화 (Customized Response Structure):
- 클라이언트는 요청의 구조를 지정할 수 있으며, 서버는 클라이언트의 요청에 따라 응답을 제공합니다. 이는 클라이언트가 받고 싶은 데이터의 구조를 정확하게 지정할 수 있게 해줍니다.
- 클라이언트는 서버에 정의된 스키마를 기반으로 데이터를 요청합니다.
스키마
아래와 같은 스키마 개념이 있다.(여기 참조)
type Query {
bookById(id: ID): Book
}
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
}
장단점
Q&A
- 아니 무슨 단일 endpoint라고 자랑하더니 mutation마다 명세서를 만들어야 하는거 같네.(암튼 클라이언트 맘대로 쿼리하는 방임형 자유는 아닌거 같네) 이럴거면 endpoint 여러개인거랑 뭐가 다르지? Query의 경우는 개별 명세서가 필요 없나?
- federation?
반응형
'System Architect' 카테고리의 다른 글
위임(delegate) 패턴 (0) | 2024.02.17 |
---|---|
Application (0) | 2023.10.28 |
gRPC (0) | 2023.10.11 |
시스템설계 Q&A 2 (0) | 2023.09.20 |
데이터 분석 관련 정리 (0) | 2023.08.19 |