Raffi Rabbani
Raffi Rabbani

Handling HTTP Methods

# Web Development with Go
Medium
Icon

Di materi sebelumnya, router kita hanya peduli pada Alamat (URL), tidak peduli Cara (Method) aksesnya.

Masalah

Secara default, mux.HandleFunc("/users", ...) akan menerima SEMUA jenis request:

  • GET /users (Ambil data user) -> Boleh
  • POST /users (Buat user baru) -> Boleh
  • DELETE /users (Hapus user) -> Boleh
  • Padahal, kita mungkin ingin logic yang berbeda untuk setiap method.

    Solusi: Switch Case

    Karena Go standar sangat minimalis, kita tidak menulis app.Get() atau app.Post() seperti di framework lain. Kita melakukan pengecekan manual di dalam handler menggunakan switch.

    Cara Kerja

    Kita memeriksa isi dari r.Method (Metode Request).

    MAIN.GO
    package main
    import (
    "fmt"
    "net/http"
    )
    func usersHandler(w http.ResponseWriter, r *http.Request) {
    // Cek metode apa yang dipakai user
    switch r.Method {
    case "GET":
    // Logic untuk mengambil data
    w.Write([]byte("Daftar semua user..."))
    case "POST":
    // Logic untuk menyimpan data
    w.Write([]byte("Berhasil membuat user baru!"))
    default:
    // Jika method selain GET/POST (misal DELETE), kita tolak.
    http.Error(w, "Method tidak diizinkan", http.StatusMethodNotAllowed)
    }
    }
    func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/users", usersHandler)
    fmt.Println("Coba test dengan Postman/Curl ke localhost:8080/users")
    http.ListenAndServe(":8080", mux)
    }

    Kenapa Manual?

    Mungkin terlihat ribet dibanding framework lain, tapi cara ini membuat programmer paham betul alur programnya. Tidak ada "sihir" di belakang layar. Kode menjadi sangat eksplisit dan mudah di-debug.