For the complete documentation index, see llms.txt. This page is also available as Markdown.

Json

Setelah server bisa menyala dan mati dengan aman, sekarang saatnya membangun isi komunikasi API itu sendiri. Hampir semua API modern menggunakan JSON (JavaScript Object Notation) sebagai format pertukaran data karena ringan, mudah dibaca manusia, dan didukung oleh hampir semua bahasa pemrograman.

Di bab ini kita akan mengubah handler HelloWorld menjadi endpoint API yang sesungguhnya: mengembalikan daftar pengguna dalam format JSON.

📂 Kode Lengkap Bab Ini: Seluruh kode yang dibahas di bab ini tersedia di GitHub:

🔗 github.com/jacky-htg/workshop/tree/main/03-json

3.1 Menyiapkan Proyek

Sebelum mulai, kita buat proyek Go dengan module system:

go mod init workshop

Kita akan membutuhkan library uuid7 untuk menghasilkan ID unik. Tambahkan dependency-nya:

go get github.com/jacky-htg/go-libs/uuid7
go mod tidy

Struktur proyek: Saat ini semua kode masih dalam satu file main.go. Seiring berkembangnya framework, kita akan memisahkan ke package-package terpisah.

3.2 Mendefinisikan Struct Data

Di Go, JSON direpresentasikan melalui struct tags. Tag json:"nama_field" menentukan bagaimana field dalam struct dipetakan ke JSON.

type User struct {
    ID       string `json:"id"`
    Name     string `json:"name"`
    Username string `json:"username"`
    Password string `json:"password"`
    Email    string `json:"email"`
    IsActive bool   `json:"is_active"`
}

Konvensi penamaan: Di Go kita menggunakan PascalCase untuk field struct (karena bersifat publik), tapi di JSON kita menggunakan snake_case — ini praktik umum dalam API REST.

3.3 Membuat Handler JSON Pertama

Handler ListUsers akan:

  1. Menyiapkan data contoh (biasanya dari database, nanti akan kita bahas)

  2. Mengonversi (marshal) data Go ke JSON

  3. Mengatur header Content-Type

  4. Menulis response ke client

3.4 Kode Lengkap main.go

Berikut kode lengkap yang menggabungkan startup, graceful shutdown, dan JSON response:

3.5 Menjalankan dan Menguji

Jalankan server:

Uji endpoint menggunakan curl:

Response yang diharapkan:

3.6 Catatan Penting tentang Password

Peringatan keamanan: Dalam contoh di atas, password dikirim dalam bentuk plain text! Ini TIDAK boleh dilakukan di aplikasi nyata. Nanti kita akan membahas:

  • Hashing password (bcrypt)

  • Tidak mengirim field password dalam response API

  • Menggunakan struct tags seperti json:"password,omitempty" atau DTO (Data Transfer Object)

Ringkasan Bab 3

Di bab ini kita telah belajar:

  1. Membuat struct dengan JSON tags untuk memetakan data Go ke JSON

  2. Menggunakan json.Marshal untuk mengonversi data menjadi JSON

  3. Mengatur Content-Type: application/json di response header

  4. Menulis JSON response ke http.ResponseWriter

  5. Menambahkan dependency management dengan go mod

Apa yang sudah bisa dilakukan API kita:

  • ✅ Menyalakan server dengan konfigurasi timeout

  • ✅ Mematikan server secara graceful

  • ✅ Mengembalikan response dalam format JSON

Yang masih perlu ditambahkan:

  • ❌ Menerima data dari client (request body)

  • ❌ Validasi data

  • ❌ Menyimpan data ke database

  • ❌ Status HTTP yang tepat (200, 400, 404, dsb)

Pada bab berikutnya, kita akan menghubungkan API dengan database agar data tidak lagi statis/hardcoded.

Last updated