Routing
Sejauh ini API kita hanya memiliki satu endpoint: GET /users. Aplikasi nyata membutuhkan banyak endpoint dengan berbagai method HTTP (GET, POST, PUT, DELETE) dan parameter di URL (seperti /users/{id}). Di sinilah routing berperan.
Bab ini akan membangun dua jenis router:
CLI Router – untuk perintah command line (migrate, seed, scheduler dll)
HTTP Router – untuk REST API endpoints
📂 Kode Lengkap Bab Ini: Seluruh kode yang dibahas di bab ini tersedia di GitHub:
10.1 Routing di Go 1.22+
Sejak Go 1.22, package net/http memiliki kemampuan routing yang jauh lebih baik. Kita tidak perlu lagi library eksternal seperti gorilla/mux atau chi untuk kebutuhan dasar.
Fitur baru yang tersedia:
Method-based routing:
mux.HandleFunc("GET /users", handler)Path parameters:
mux.HandleFunc("GET /users/{id}", handler)Wildcard:
mux.HandleFunc("GET /files/{path...}", handler)
10.2 CLI Router
CLI router bertugas memetakan perintah dari terminal ke fungsi yang sesuai. Pola yang umum digunakan adalah switch-case berdasarkan argumen pertama.
Struktur Router CLI
Buat file internal/router/cli.go:
Update CLI Main
cmd/cli/main.go sekarang lebih sederhana — hanya bertugas parsing argumen dan memanggil router:
Penggunaan CLI sekarang:
10.3 HTTP Router (REST API)
HTTP router memetakan method HTTP + path ke handler function. Dengan Go 1.22+, kita bisa menulis routing yang ekspresif dan aman tipe.
Struktur Router API
Buat file internal/router/api.go:
Sintaks Method + Path: "GET /users" adalah format baru di Go 1.22+. Jika method tidak cocok, otomatis mengembalikan 405 Method Not Allowed.
Update Server Main
cmd/server/main.go sekarang lebih bersih — cukup memanggil router.Api() sebagai handler:
10.4 Menambahkan Endpoint Baru (Contoh)
Untuk menambahkan endpoint baru, cukup tambahkan di router/api.go:
Dan implementasikan method handler yang sesuai di user_handler.go.
10.5 Struktur Direktori Setelah Routing
10.6 Perbandingan Sebelum dan Sesudah
CLI handling
Langsung di main()
router.Cli() dengan switch-case
HTTP routing
Hardcoded di main()
router.Api() terpusat
Method support
Semua method masuk ke handler yang sama
Method-specific routing
Path parameters
Tidak ada (parsing manual)
Dukungan bawaan /{id}
Penambahan endpoint
Mengubah main()
Cukup tambah di router.Api()
Ringkasan Bab 10
Di bab ini kita telah belajar:
CLI Router – Memetakan perintah terminal ke fungsi menggunakan switch-case
HTTP Router (Go 1.22+) – Routing dengan method + path dalam satu baris
Pemisahan tanggung jawab – Router bertugas memetakan, handler tetap fokus pada logika bisnis
Struktur yang scalable – Endpoint baru mudah ditambahkan tanpa mengganggu main()
Manfaat yang kita peroleh:
✅ CLI dan HTTP routing terpisah dan terorganisir
✅ Sintaks routing Go 1.22+ lebih bersih dan tidak perlu library eksternal
✅ main() menjadi sangat ramping — hanya orchestrasi
✅ Persiapan untuk CRUD lengkap di bab berikutnya
Yang akan datang:
Saat ini kita hanya memiliki endpoint GET /users (READ)
Bab selanjutnya: CRUD – menambahkan Create, Read (by ID), Update, dan Delete untuk resource User
Last updated
Was this helpful?