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

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:

  1. CLI Router – untuk perintah command line (migrate, seed, scheduler dll)

  2. HTTP Router – untuk REST API endpoints

πŸ“‚ Kode Lengkap Bab Ini: Seluruh kode yang dibahas di bab ini tersedia di GitHub:

πŸ”— github.com/jacky-htg/workshop/tree/main/10-routing

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

Aspek
Sebelum
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:

  1. CLI Router – Memetakan perintah terminal ke fungsi menggunakan switch-case

  2. HTTP Router (Go 1.22+) – Routing dengan method + path dalam satu baris

  3. Pemisahan tanggung jawab – Router bertugas memetakan, handler tetap fokus pada logika bisnis

  4. 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