나의 발자취

[Node.js] GraphQL Schema 설계, mutation 타입 본문

Backend

[Node.js] GraphQL Schema 설계, mutation 타입

달모드 2024. 10. 15. 11:26

일단 냅다 올리고 시작

type Query { // 예약어
    hello: String
    getPost(id: ID!): Post
}

type Post { // 커스텀 자료형 
    id: ID!
    title: String!
    content: String!
}

type Mutation { // 예약어
    createPost(input: PostInput): Post
    updatePost(id: ID!, input: PostInput) : Post
    deletePost(id: ID!)
}

input PostInput {
    title: String!
    content: String!
}

// 기본 타입
// Int: 32bit 정수형
// Float: 부동 소수점 숫자
// String
// Boolean
// ID: 고유 식별자(문자열)
// 커스텀 타입


{ // hello 데이터를 가져오고, id가 1번인 게시글의 데이터를 요청하는 쿼리문
    hello
    getPost(id: "1") {
        id
        title
        content
    }
}

mutation { // QL 요청 -> 게시글 생성 요청 (insert, update, delete)
    createPost(input: {title: "New Post", content" "New Content"}) {
        id
        title
        content
    }
}


// QL 응답 -> 게시글 생성 후 응답 결과
{
    "data": {
        "createPost": {
            "id":2,
            "title":"New Post",
            "content":"New Content"
        }
    }
}

 

위 코드에서 Query, Mutation은 예약어이고, swift의 메서드와 프로토콜이랑 비슷한데 ! 의 경우는 필수적인 데이터를 의미한다.

 

그래프QL은 "뮤테이션(mutation) 쿼리"라고 하는 특정 쿼리 형식을 사용해서 데이터 집합에서 요소를 생성, 업데이트하거나 삭제한다.
출처: https://www.itworld.co.kr/news/343305#csidxef63a25950bac55ac6e191119c91076 

 

 

위에서 정의한 Mutation 타입을 호출하는 방법은 아래와 같다.

Mutation 호출

mutation { // QL 요청 -> 게시글 생성 요청
    createPost(input: {title: "New Post", content" "New Content"}) {
        id
        title
        content
    }
}

type Mutation은 createPost 메서드가 있고, 인풋으로는 title, content 객체를 받는다.

그리고 Post 프로토콜을 따르므로, type Post를 정의한 대로 반드시 요구되는 데이터 자료형을 요청한다.

 

 

그러면 아래와 같은 결과가 나올 것으로 예상된다.

Mutation 응답

// QL 응답 -> 게시글 생성 후 응답 결과
{
    "data": {
        "createPost": {
            "id":2,
            "title":"New Post",
            "content":"New Content"
        }
    }
}
728x90
반응형
Comments