
REST API는 URL의 집합입니다.
같은 맥락에서, GraphQL API는 Type의 집합이라고 생각하면 됩니다. 타입을 알려주지 않으면, 오류가 생길 겁니다.
GraphQL에서의 query는, REST API의 Get Request를 만드는 것과 같다는 것을 명심해주세요
| GraphQL server에게 서버에 있는 데이터들의 타입을 미리 설명해줘야합니다.
GraphQL에서 Mutation은 데이터를 생성, 수정, 삭제하는 작업을 수행할 때 사용됩니다. Mutation은 Query와 유사한 구조를 가지며, 클라이언트에서 서버로 데이터를 보내는 역할을 합니다.
다음은 GraphQL Mutation의 간단한 예시 코드입니다:
mutation CreatePost($title: String!, $content: String!) {
createPost(title: $title, content: $content) {
id
title
content
createdAt
}
}
이 Mutation은 createPost라는 필드를 가지고 있으며, 두 개의 필수 인자(title, content)를 받습니다. 그리고 Mutation의 실행 결과로 생성된 Post 객체의 id, title, content, createdAt 필드를 반환합니다.
클라이언트에서 이 Mutation을 실행하려면 다음과 같이 작성할 수 있습니다:
const CREATE_POST_MUTATION = gql`
mutation CreatePost($title: String!, $content: String!) {
createPost(title: $title, content: $content) {
id
title
content
createdAt
}
}
`;
const [createPost, { data, loading, error }] = useMutation(CREATE_POST_MUTATION, {
variables: {
title: 'New Post',
content: 'This is the content of the new post.'
}
});
이 코드에서는 useMutation 훅을 사용하여 Mutation을 실행합니다. variables 객체에 Mutation에 필요한 인자 값을 전달합니다. Mutation 실행 결과는 data, loading, error 변수에 저장됩니다.
Mutation을 실행하려면 createPost() 함수를 호출하면 됩니다. 이 함수는 Mutation을 실행하고, 서버로부터 받은 데이터를 클라이언트 상태에 업데이트합니다.
Mutation은 데이터를 변경하는 작업을 수행하므로, 서버 측에서 적절한 권한 검사, 데이터 유효성 검사, 트랜잭션 처리 등의 로직을 구현해야 합니다. 이를 통해 데이터의 일관성과 무결성을 보장할 수 있습니다.
관계형 데이터 베이스의 스키마와 비슷한 것입니다.
GraphQL Schema는 API의 데이터 구조와 쿼리 가능한 필드를 정의하는 핵심 요소입니다. Schema는 타입 시스템을 사용하여 API에서 사용할 수 있는 데이터 형식을 정의합니다.
다음은 간단한 GraphQL Schema의 예시 코드입니다:
type Post {
id: ID!
title: String!
content: String!
createdAt: String!
author: User!
}
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}
type Query {
posts: [Post!]!
post(id: ID!): Post
users: [User!]!
user(id: ID!): User
}
type Mutation {
createPost(title: String!, content: String!): Post!
updatePost(id: ID!, title: String, content: String): Post!
deletePost(id: ID!): Post!
createUser(name: String!, email: String!): User!
}
schema {
query: Query
mutation: Mutation
}
이 Schema에는 다음과 같은 타입이 정의되어 있습니다:
Post 타입: id, title, content, createdAt, author 필드를 가집니다.
User 타입: id, name, email, posts 필드를 가집니다.
Query 타입: posts, post, users, user 쿼리 필드를 가집니다.
Mutation 타입: createPost, updatePost, deletePost, createUser 뮤테이션 필드를 가집니다.
이 Schema를 바탕으로 클라이언트는 다음과 같은 쿼리와 뮤테이션을 실행할 수 있습니다:
쿼리:
{ posts { id title content createdAt author { id name email } } }
뮤테이션:
mutation { createPost(title: "New Post", content: "This is the content of the new post") { id title content createdAt } }