type EquipmentAdv {
id: ID!
used_by: String!
count: Int!
use_rate: Float
is_new: Boolean!
}
| 타입 | 설명 |
|---|---|
| ID | 기본적으로 Sring이나, 고유 식별자(ID) 역할임을 나타냄. ID 역할을 하는 것을 보여줌 |
| String | UTF-8 문자열 |
| Int | 숫자형, 정수 |
| Float | 소수형태의 숫자 |
| Boolean | 참/거짓 |
null을 반환해서는 안된다는 것. !표시가 된 것은 어떤 값이든 반환을 해야 한다.
enum타입과 같이 정해진 특정 값만 반환할 수 잇다.
const { gql } = require('apollo-server')
const typeDefs = gql`
enum Role {
developer
designer
planner
}
enum NewOrUsed {
new
used
}
`
module.exports = typeDefs
// ...
const enums = require('./typedefs-resolvers/_enums')
// ...
const typeDefs = [
// ...
enums,
// ...
]
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!
}
`
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:null | users:[ ] | users:[...,null] |
|---|---|---|---|
| [String] | ✔ | ✔ | ✔ |
| : user의 필드 자체가 null이 될 수 있다. | : 안에 들어가는 배열의 요소중에 null이 들어갈 수 있다. | ||
| [String!] | ✔ | ✔ | ❌ |
| : 배열 안에 null이 들어갈 수 없다.[배열 안에 모두 값을 반환해야 한다.] | |||
| [String]! | ❌ | ✔ | ✔ |
| : users라는 항목에 null이 오면 안된다 | |||
| [String!]! | ❌ | ✔ | ❌ |
| : 필드가 null이 오면 안된다. | : 배열 안에 null이 오면 안된다. |
아래 코드와 같이 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!]
}
`;