Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
12 Jul 2025 · 5 mnt baca ·Artikel 12 / 125
Go

12 Menulis File Skema GraphQL Pertama Anda

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

12 Menulis File Skema GraphQL Pertama Anda

Ditulis oleh: Seorang engineer yang pernah tersesat dalam hutan RESTful API


GraphQL sudah menjadi API favorit banyak tim engineering tidak hanya karena fleksibilitas query-nya, tapi juga berkat sistem tipenya yang sangat eksplisit. Namun, bagi yang baru kenal, memahami bagaimana menulis file skema (schema file) pertama bisa terasa intimidatif. Tenang, di artikel ini saya akan membimbing Anda langkah demi langkah hingga menghasilkan skema GraphQL pertama yang siap diuji.

Apa Itu File Skema GraphQL?

Secara sederhana, file skema GraphQL (*.graphql atau *.gql) adalah blueprint API Anda. Di sana Anda mendeskripsikan tipe data apa yang tersedia, field apa saja yang bisa diquery, dan tipe operasi apa (Query, Mutation, Subscription) yang didukung.

Skema GraphQL biasanya ditulis dalam format Schema Definition Language (SDL).

Diagram Alur: Skema GraphQL dalam API Lifecycle

Mari mulai dengan gambaran besarnya dulu. Berikut alur sederhana (menggunakan Mermaid):

MERMAID
flowchart TD
    A[Client mengirim query] --> B[Server memetakan ke skema GraphQL]
    B --> C[GraphQL Resolver menangani logic]
    C --> D[Data dikembalikan ke client]

Kuncinya: Skema adalah kontrak antara client dan server.

Simulasi Kasus: API Buku

Anggap tim Anda ingin membangun API sederhana untuk data buku dan penulis. Fungsionalitas awal berupa:

  • Mengambil daftar buku
  • Mengambil detail buku
  • Menambah buku baru

Mari peta kebutuhan tersebut ke skema.

1. Mulai dengan type Dasar

Pikirkan entitas utama: buku dan penulis.

graphql
 1type Book {
 2  id: ID!
 3  title: String!
 4  author: Author!
 5  year: Int
 6}
 7
 8type Author {
 9  id: ID!
10  name: String!
11  books: [Book!]!
12}

Penjelasan:

  • Tipe data Boolean, String, Int, Float, ID tersedia secara default.
  • ! menandakan required (tidak boleh null).
TipeKeteranganWajib?
IDUnik identifierYa
StringTeks (title, name)Ya
IntTahun terbitTidak

2. Definisikan Query

Operasi baca (read/fetch) adalah domain dari type Query.

graphql
1type Query {
2  books: [Book!]!
3  book(id: ID!): Book
4  authors: [Author!]!
5}

Dengan begini, client bisa melakukan:

  • books → Mendapat semua buku
  • book(id: ...) → Mendapat detail sebuah buku
  • authors → Mendapat semua penulis

Contoh query:

graphql
1query {
2  books {
3    id
4    title
5    author {
6      name
7    }
8  }
9}

3. Tambahkan Mutation

Untuk menambah data, gunakan type Mutation.

graphql
1type Mutation {
2  addBook(title: String!, authorId: ID!, year: Int): Book
3}

Contoh mutasi:

graphql
1mutation {
2  addBook(title: "Clean Code", authorId: "1", year: 2008) {
3    id
4    title
5  }
6}

4. Susun Menjadi Satu Skema

File schema.graphql Anda sekarang kira-kira jadi begini:

graphql
 1type Book {
 2  id: ID!
 3  title: String!
 4  author: Author!
 5  year: Int
 6}
 7
 8type Author {
 9  id: ID!
10  name: String!
11  books: [Book!]!
12}
13
14type Query {
15  books: [Book!]!
16  book(id: ID!): Book
17  authors: [Author!]!
18}
19
20type Mutation {
21  addBook(title: String!, authorId: ID!, year: Int): Book
22}

5. Validasi dengan Tool

Disarankan menggunakan GraphQL Playground atau extensi VSCode seperti Apollo GraphQL. Copy-paste skema di atas, server Anda siap menerima query dan mutation.

6. Simulasi Resolver (Pseudocode)

Bagian penting setelah skema: resolver (handler logic). Contoh dalam JavaScript (Node.js):

js
 1const resolvers = {
 2  Query: {
 3    books: () => db.books,
 4    book: (_, { id }) => db.books.find(b => b.id === id),
 5    authors: () => db.authors,
 6  },
 7  Mutation: {
 8    addBook: (_, { title, authorId, year }) => {
 9      const book = { id: uuid(), title, author: authorId, year };
10      db.books.push(book);
11      return book;
12    }
13  },
14  Book: {
15    author: (book) => db.authors.find(a => a.id === book.author),
16  },
17  Author: {
18    books: (author) => db.books.filter(b => b.author === author.id),
19  }
20};

7. Kembangkan!

GraphQL sangat fleksibel. Skema tinggal Anda kembangkan: mari tambah field baru, misal rating:

graphql
1type Book {
2  ...
3  rating: Float
4}

Atau type baru, misal Review, lalu relasikan dengan Book.

8. Tips Praktis Penulisan Skema

  • Modular: Pisahkan tipe-tipe besar ke file sendiri (book.graphql, author.graphql), lalu import (pakai tool seperti Apollo/GraphQL-tools).
  • Komentar: Pakai tanda # untuk menulis komentar agar skema tetap terjaga jelas.
  • Enum: Gunakan Enum untuk field dengan pilihan terbatas (misal status).
graphql
1enum BookStatus {
2  AVAILABLE
3  OUT_OF_STOCK
4  DELETED
5}
  • InputType: Untuk input kompleks pada mutation, deklarasikan tipe input terpisah.
graphql
1input BookInput {
2  title: String!
3  authorId: ID!
4  year: Int
5}

9. Testing: Query Table

Berikut tabel perbandingan query dan response dari skema yang Anda buat:

QueryResponse Sample
books { id, title }[ {id: "1", title: "GraphQL in Action"}, ... ]
book(id: “2”) { title, author {name}}{ "title": "Clean Code", author: { "name": "Bob" } }

10. Kapan schema diubah?

Merubah schema (misal menambah field baru) sebaiknya:

  • Setelah diskusi kebutuhan client
  • Setelah validasi data model
  • Mengikuti versioning, jika breaking change

11. Skema dan Dokumentasi Otomatis

Skema adalah dokumentasi API. Tools seperti GraphQL Playground, Apollo Studio, atau Voyager akan menampilkan API dari skema tadi secara otomatis.

12. Review: 5 Checklist Validasi Skema Anda

ChecklistSaran
Tipe data eksplisitJangan biarkan field bertipe String saja, modelkan lebih spesifik jika bisa
Relasi antar tipe terdefinisiPakai field referensi
Input pada mutation jelas & amanGunakan InputType
Ada komentar pada tipe/field kritisMudahkan pembaca lain
Response predictable (required/optional)Tentukan ! pada field yang wajib

Penutup

Skema GraphQL adalah pondasi utama API modern. Luangkan waktu mendesain sebelum coding resolvernya. Modularisasi skema, tulis komentar, dan diskusikan dengan tim. Dengan 12 langkah di atas, saya harap Anda tidak hanya mampu menulis file skema pertama, tapi juga siap untuk membuat API GraphQL yang solid, ekspansif, dan mudah di-maintain.

Jika ada tips lain atau ingin request topik lanjutan, sila tinggalkan komentar. Happy GraphQL-ing! 🚀

Artikel Terkait

💬 Komentar