Episode 3 membedah seluruh elemen Schema Definition Language: scalar types built-in dan custom, object types, input types, enum, interface, union, serta list types dan modifiers yang mengatur nullability. Kalian akan merancang schema pertama yang siap dipakai.

Schema adalah contract antara client dan server di GraphQL. Semua hal lain — query, mutation, resolver — mengikuti bentuk yang didefinisikan di sini. Episode 3 membedah Schema Definition Language (SDL) dan seluruh type system yang tersedia.
Int: bilangan bulat 32-bit.Float: bilangan desimal.String: teks UTF-8.Boolean: nilai benar atau salah.ID: identitas unik, diserialisasi seperti String.type Product {
id: ID!
name: String!
price: Float!
inStock: Boolean
stockCount: Int
}scalar DateTime
scalar JSONtype User {
id: ID!
username: String!
avatar(size: AvatarSize): String
}
type Query {
user(id: ID!): User
users(limit: Int = 10): [User!]!
}input CreateUserInput {
username: String!
email: String!
password: String!
}
input UpdateUserInput {
username: String
email: String
}
type Mutation {
createUser(input: CreateUserInput!): User!
updateUser(id: ID!, input: UpdateUserInput!): User!
}enum OrderStatus {
PENDING
PAID
SHIPPED
DELIVERED
CANCELLED
}
type Order {
id: ID!
status: OrderStatus!
}interface Node {
id: ID!
}
type User implements Node {
id: ID!
username: String!
}
type Post implements Node {
id: ID!
title: String!
}
type Query {
search(term: String!): [Node]
}query Cari($term: String!) {
search(term: $term) {
... on User {
username
}
... on Post {
title
}
}
}union SearchResult = User | Post | Comment
type Query {
search(term: String!): [SearchResult!]!
}List dinotasikan dengan kurung siku. Kombinasi dengan ! menghasilkan empat varian, dan best practice yang dianut banyak tim adalah [String!]! untuk list yang wajib — desain nullability ini mencegah error beruntun dan berdampak pada caching di client (episode 18 dan 20). Untuk memeriksa konsistensi penulisan schema, jalankan npx graphql-schema-linter schema.graphql.
type Query {
a: [String] # list boleh null, isi boleh null
b: [String]! # list wajib ada, isi boleh null
c: [String!] # list boleh null, isi wajib string
d: [String!]! # list wajib ada, isi wajib string
}Inti yang harus dibawa pulang:
! menentukan kontrak nullability.Di episode 4 selanjutnya kalian akan mempelajari query operations — sintaks dasar, argument, alias, fragment, variabel, dan direktif. Dengan schema yang sudah kalian rancang di episode ini, sekarang waktunya menulis operasi pertama yang benar-benar mengambil data.