[GraphQL] GraphQL 기본타입

cooking_123·2024년 5월 2일

GraphQL

목록 보기
3/5

1. 스칼라 타입 : GraphQL 내장 자료형

    type EquipmentAdv {
        id: ID!
        used_by: String!
        count: Int!
        use_rate: Float
        is_new: Boolean!
    }
타입설명
ID기본적으로 Sring이나, 고유 식별자(ID) 역할임을 나타냄. ID 역할을 하는 것을 보여줌
StringUTF-8 문자열
Int숫자형, 정수
Float소수형태의 숫자
Boolean참/거짓

! : Null

null을 반환해서는 안된다는 것. !표시가 된 것은 어떤 값이든 반환을 해야 한다.

2. 열거 타입 : 미리 지정된 값들 중에서만 반환

enum타입과 같이 정해진 특정 값만 반환할 수 잇다.

_enums.js

const { gql } = require('apollo-server')
const typeDefs = gql`
    enum Role {
        developer
        designer
        planner
    }
    enum NewOrUsed {
        new
        used
    }
`
module.exports = typeDefs

index.js

// ...
const enums = require('./typedefs-resolvers/_enums')
// ...
const typeDefs = [
    // ...
    enums,
    // ...
]

equipments.js

const typeDefs = gql`
    type Equipment {
        id: ID!
        used_by: Role! // 특정 열거 타입 
        count: Int!
        new_or_used: NewOrUsed! // 특정 열거 타입 
    }
    type EquipmentAdv {
        id: ID!
        used_by: Role! // 특정 열거 타입 
        count: Int!
        use_rate: Float
        is_new: Boolean!
    }
`

3. 리스트 타입 : 특정 타입의 배열을 반환

const typeDefs = gql`
    // ...
    type EquipmentAdv {
        id: ID!
        used_by: Role!
        count: Int!
        use_rate: Float
        is_new: Boolean!,
        users: [String!]
    }
`
// ...
const resolvers = {
    Query: {
        // ...
        equipmentAdvs: (parent, args) => dbWorks.getEquipments(args)
            .map((equipment) => {
                if (equipment.used_by === 'developer') {
                    equipment.use_rate = Math.random().toFixed(2)
                }
                equipment.is_new = equipment.new_or_used === 'new'
                if (Math.random() > 0.5) {
                    equipment.users = []
                    dbWorks.getPeople(args).forEach((person) => {
                        if (person.role === equipment.used_by && Math.random() < 0.2) {
                            equipment.users.push(person.last_name)
                        }
                    })
                }
                return equipment
            }),
    },
    // ...
}

위와 같은 코드는 아래와 같이 데이터가 들어오게 된다.

      {
        "id": "dual monitor",
        "used_by": "developer",
        "count": 20,
        "use_rate": 1,
        "is_new": false,
        "users": [
          "Martin",
          "Owen",
          "Grant",
          "White",
          "Dawson",
          "Elliott"
        ]
      },

!:Null에 대해서 좀 더 자세히 살펴보자면

<선언부>users:nullusers:[ ]users:[...,null]
[String]
: user의 필드 자체가 null이 될 수 있다.: 안에 들어가는 배열의 요소중에 null이 들어갈 수 있다.
[String!]
: 배열 안에 null이 들어갈 수 없다.[배열 안에 모두 값을 반환해야 한다.]
[String]!
: users라는 항목에 null이 오면 안된다
[String!]!
: 필드가 null이 오면 안된다.: 배열 안에 null이 오면 안된다.

4. 객체 타입

아래 코드와 같이 type 설정하는 것들 등 모두 객체 타입이다. 스칼라 타입을 활용해 여러 객체 타입들을 정의하면서 GraphQL 서버를 만드는 것이다.

const typeDefs = gql`
    type Equipment {
        id: ID!
        used_by: Role!
        count: Int!
        new_or_used: NewOrUsed!
    }
    type EquipmentAdv {
        id: ID!
        used_by: Role!
        count: Int!
        use_rate: Float
        is_new: Boolean!
        users: [String!]
    }
`;

0개의 댓글