Dasar-Dasar Rantai Middleware HTTP
Membungkus http.Handler dan merangkainya dengan next
Dasar-Dasar Rantai Middleware HTTP adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Perangkat tengah di net/http
Dalam pustaka standar Go, perangkat tengah adalah fungsi yang menerima http.Handler dan mengembalikan http.Handler baru dengan perilaku tambahan yang membungkus penangan asli.
type Middleware func(http.Handler) http.HandlerPerangkat tengah dasar
HandlerFunc bagian dalam membungkus penangan asli dengan logika sebelum dan sesudah:
func Logger(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)
log.Printf("← %s %s done", r.Method, r.URL.Path)
})
}Menerapkan perangkat tengah
Bungkus penangan sebelum mendaftarkannya ke mux:
mux := http.NewServeMux()
mux.Handle("/api/", Logger(Auth(apiHandler)))
http.ListenAndServe(":8080", mux)Pembantu rantai perangkat tengah
Fungsi Chain menerapkan beberapa perangkat tengah dalam urutan kiri ke kanan yang mudah dibaca:
func Chain(h http.Handler, ms ...func(http.Handler) http.Handler) http.Handler {
for i := len(ms)-1; i >= 0; i-- { h = ms[i](h) }
return h
}
// Usage: Chain(handler, Logger, Auth, RateLimit)Konteks dalam perangkat tengah
Tambahkan nilai yang berlaku untuk lingkup permintaan dengan membuat konteks turunan dan membungkus permintaan:
func RequestID(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
id := uuid.New().String()
ctx := context.WithValue(r.Context(), reqIDKey, id)
w.Header().Set("X-Request-ID", id)
next.ServeHTTP(w, r.WithContext(ctx))
})
}Pembungkus penulis respons
Tangkap kode status yang ditulis penangan dengan membungkus ResponseWriter:
type captureWriter struct {
http.ResponseWriter
status int
}
func (cw *captureWriter) WriteHeader(code int) {
cw.status = code
cw.ResponseWriter.WriteHeader(code)
}Perangkat tengah pemulihan kepanikan
Pulihkan dari kepanikan untuk mencegah server mogok:
func Recovery(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if rec := recover(); rec != nil {
http.Error(w, "Internal Server Error", 500)
}
}()
next.ServeHTTP(w, r)
})
}Urutan itu penting
Perangkat tengah berjalan sesuai urutan pembungkusannya terhadap penangan. Recovery harus berada di lapisan terluar (membungkus semuanya). Auth harus mendahului logika bisnis. Pencatatan biasanya berada di lapisan terluar setelah Recovery.
Kompatibilitas dengan perute pihak ketiga
Karena perangkat tengah mengikuti signatur standar func(http.Handler) http.Handler, perangkat tengah kompatibel dengan chi, gorilla/mux, dan perute apa pun yang menerima http.Handler.
Global dibandingkan dengan khusus rute
Terapkan perangkat tengah secara global ke seluruh mux, atau bungkus penangan individual untuk perilaku khusus rute. Subperute chi membuat perangkat tengah tingkat grup lebih rapi.
Menguji perangkat tengah
Gunakan httptest.NewRecorder dan httptest.NewRequest untuk menguji perangkat tengah secara terpisah tanpa memulai server nyata.
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
Logger(http.HandlerFunc(noop)).ServeHTTP(w, r)Pemeriksaan Singkat
Apa signatur perangkat tengah net/http standar?
Ringkasan: Rantai Perangkat Tengah
Poin utama:
- func(http.Handler) http.Handler adalah signatur standar
- Gunakan pembantu Chain untuk menghindari penyarangan yang dalam
- r.WithContext(ctx) untuk menambahkan nilai; gunakan penulis tangkap untuk merekam status
- Recovery di lapisan terluar; Auth sebelum logika bisnis; pencatatan setelah Recovery
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar Rantai Middleware HTTP” gratis?
Ya — teks lengkap “Dasar-Dasar Rantai Middleware HTTP” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar Rantai Middleware HTTP”?
Membungkus http.Handler dan merangkainya dengan next Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Dasar-Dasar Rantai Middleware HTTP” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar Rantai Middleware HTTP
- Middleware Logging dan ID Permintaan
- Middleware Autentikasi dan Pembatasan Laju
- Middleware CORS dan Pemulihan dari Panic