Belajar Golang - Networking Dasar, HTTP Server, dan REST API
Episode 10 of 19

Belajar Golang - Networking Dasar, HTTP Server, dan REST API

Episode ini membangun HTTP server pertama dengan net/http dan http.ServeMux Go 1.22, termasuk middleware dan routing dengan method serta wildcard. Kalian juga mengenal router modern chi, gin, echo, dan best practice desain REST API.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Setelah menguasai data, konfigurasi, dan database, saatnya aplikasi Go kalian berbicara dengan dunia luar. Episode 10 adalah titik di mana program kalian berubah menjadi service nyata dengan HTTP server, routing, dan REST API.

Kita mulai dari fondasi: net/http dan handler. Lalu routing dengan http.ServeMux yang sejak Go 1.22 mendukung method dan wildcard di path. Setelah itu pola middleware untuk menangani cross-cutting concerns, perbandingan router modern seperti chi, gin, dan echo, serta best practice desain route.

HTTP Server dan Handler

Handler dan http.ServeMux

Dua konsep inti net/http: http.Handler adalah interface dengan method ServeHTTP, dan http.ServeMux adalah router bawaan yang mencocokkan request ke handler.

HTTP server pertama
package main
 
import (
	"fmt"
	"net/http"
)
 
func main() {
	mux := http.NewServeMux()
 
	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Halo dari server Go")
	})
 
	http.ListenAndServe(":8080", mux)
}

Jalankan go run main.go lalu uji dengan curl http://localhost:8080 dari terminal lain. http.ResponseWriter menulis respons, http.Request membawa semua data dari klien.

Request Lifecycle

Setiap request melewati alur: router mencocokkan path dan method ke handler, handler memproses, lalu menulis status dan body. http.StatusOK, http.StatusNotFound, dan konstanta status lainnya menjaga kode tetap terbaca.

Handler dengan status code
mux.HandleFunc("/api/health", func(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(http.StatusOK)
	fmt.Fprintln(w, `{"status":"ok"}`)
})

Routing dengan http.ServeMux di Go 1.22

Method dan Wildcard

Sebelum Go 1.22, ServeMux hanya mencocokkan path. Kini pattern bisa menyebut method dan wildcard dengan sintaks {nama}:

Routing modern Go 1.22
mux := http.NewServeMux()
mux.HandleFunc("GET /api/pengguna", daftarPengguna)
mux.HandleFunc("GET /api/pengguna/{id}", detailPengguna)
mux.HandleFunc("POST /api/pengguna", buatPengguna)

Nilai wildcard dibaca dari request path:

Membaca path value
func detailPengguna(w http.ResponseWriter, r *http.Request) {
	id := r.PathValue("id")
	fmt.Fprintf(w, "detail pengguna %s", id)
}

r.PathValue("id") mengambil nilai segmen {id} dari URL. Routing bawaan ini menghilangkan kebutuhan router eksternal untuk banyak kasus, sambil tetap menjaga kode bebas refleksi dan performa tinggi.

Middleware

Pola Middleware Fungsional

Middleware adalah fungsi yang membungkus handler untuk menambah perilaku: logging, autentikasi, timeout, atau recovery. Pola idiomatiknya memakai function type yang mengembalikan handler.

Middleware logging
func loggingMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		log.Printf("%s %s", r.Method, r.URL.Path)
		next.ServeHTTP(w, r)
	})
}
 
func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "halaman utama")
	})
 
	http.ListenAndServe(":8080", loggingMiddleware(mux))
}

Middleware dijalankan berurutan dari luar ke dalam: request masuk melewati middleware terluar dulu. Urutan pemasangan menentukan urutan eksekusi — pasang recovery di lapisan terluar dan logging sebelum handler.

Router Modern: chi, gin, dan echo

chi: Router untuk net/http Murni

chi adalah router ringan yang kompatibel penuh dengan net/http, sehingga middleware standar tetap berfungsi. Ini pilihan paling idiomatis untuk tim yang ingin kontrol penuh tanpa framework besar.

Menambah chi
go get github.com/go-chi/chi/v5
Router chi
package main
 
import (
	"net/http"
 
	"github.com/go-chi/chi/v5"
)
 
func main() {
	r := chi.NewRouter()
	r.Get("/api/pengguna/{id}", func(w http.ResponseWriter, r *http.Request) {
		chi.URLParam(r, "id")
	})
	http.ListenAndServe(":8080", r)
}

gin dan echo

gin menawarkan performa tinggi dengan middleware bawaan seperti recovery dan logger, serta helper binding JSON yang nyaman. echo menyerupai gin dengan API yang rapi dan dukungan middleware yang luas. Pilihannya bergantung kebutuhan: chi untuk kesederhanaan net/http, gin untuk produktivitas dan ekosistem, echo untuk keseimbangan keduanya.

Best Practice Desain Route

Beberapa pedoman yang menjaga API tetap konsisten:

  • Gunakan noun, bukan verb: /api/pengguna, bukan /api/ambilPengguna.
  • Resource berlapis untuk relasi: /api/pengguna/{id}/posting.
  • Konsisten dengan HTTP method: GET membaca, POST membuat, PUT memperbarui, DELETE menghapus.
  • Status code yang tepat: 200, 201 untuk created, 400 untuk bad request, 404 untuk tidak ditemukan.
  • Versioning API untuk perubahan yang bisa memecah klien: /api/v1/pengguna.
  • Dokumentasi dengan OpenAPI agar klien bisa mengintegrasi dengan mudah.

Desain route yang konsisten memudahkan klien, mengurangi bug integrasi, dan membuat API kalian siap dipakai tim lain.

Penutup

Episode 10 mengubah program kalian menjadi service: membangun HTTP server dengan net/http, routing dengan http.ServeMux Go 1.22 yang mendukung method dan wildcard, pola middleware untuk cross-cutting concern, perbandingan router chi, gin, dan echo, serta best practice desain REST API.

Inti yang harus dibawa pulang:

  • http.Handler adalah kontrak utama net/http.
  • ServeMux Go 1.22 mendukung method dan wildcard {id}.
  • r.PathValue membaca nilai segmen path.
  • Middleware membungkus handler untuk concern lintas request.
  • chi ringan dan idiomatis; gin dan echo menawarkan lebih banyak helper.
  • Desain route pakai noun, method HTTP yang benar, dan status code tepat.

Di episode 11 selanjutnya kita akan membahas keamanan API, TLS, dan otentikasi — menyediakan HTTPS dengan TLS, implementasi JWT, OAuth2, dan session, serta praktik keamanan API seperti input validation, CORS, rate limiting, dan security headers.

Belajar Golang - Networking Dasar, HTTP Server, dan REST API | Belajar Golang