GraphQL interface와 union

이건선·2023년 5월 30일

알아볼것

목록 보기
4/13

개념

interface와 union은 다양한 타입 간의 공통점을 다루는 데 사용됩니다.

// interface 예시
...

const typeDefs = gql`
    interface Tool {
        id: ID!
        used_by: Role!
    }
`
const resolvers = {
    Tool: {
        __resolveType(tool, context, info) {
            if (tool.developed_by) {
                return 'Software'
            }
            if (tool.new_or_used) {
                return 'Equipment'
            }
            return null
        }
    }
}

...
// union 예시
...

const typeDefs = gql`
    union Given = Equipment | Supply
`
const resolvers = {
    Query: {
        givens: (parent, args) => {
            return [
                ...dbWorks.getEquipments(args),
                ...dbWorks.getSupplies(args)
            ]
        }
    },
    Given: {
        __resolveType(given, context, info) {
            if (given.used_by) {
                return 'Equipment'
            }
            if (given.team) {
                return 'Supply'
            }
            return null
        }
    }
}

...

interface

  • 인터페이스는 서로 다른 타입들이 공유하는 필드 세트를 정의합니다.

이는 객체 타입이 특정 필드를 가질 것임을 보장하는 방법으로 사용됩니다. 이를 통해 다양한 타입이 같은 인터페이스를 구현할 수 있으며, 이는 각 타입이 해당 인터페이스의 필드를 가지고 있음을 보장합니다. 예를 들어, 여기서 Tool 인터페이스는 id와 used_by 필드를 가지는데, 이는 Tool 인터페이스를 구현하는 모든 타입이 반드시 이 두 필드를 가지고 있어야 함을 의미합니다.

union

  • 유니온은 여러 타입 중 하나일 수 있는 타입을 정의합니다.

유니온 멤버 타입은 서로 관련이 없을 수 있으며, 공통 필드를 공유하지 않습니다. 이는 서로 다른 타입의 객체를 반환할 수 있는 필드를 생성하는 데 유용합니다. 예를 들어, 여기서 Given 유니온은 Equipment 또는 Supply 타입일 수 있습니다.


인터페이스와 유니온 모두 인라인 프래그먼트를 사용하여 쿼리에서 구체적인 타입에 대한 필드를 선택할 수 있게 해줍니다. __resolveType 리졸버를 통해 실제 객체의 타입을 결정하는 데도 사용됩니다.

profile
멋지게 기록하자

0개의 댓글