Redirect Endpoint
Yo'naltirish endpoint'i
Mehmonxonaning qabulxonasidagi xodim mehmonni to'g'ri xonaga yo'naltirgani kabi, bizning Redirect Endpointimiz ham qisqa kod bilan kelgan brauzerni asl, uzun havolaga "yo'naltiradi". Bu — URL Shortener'ning eng ko'p ishlatiladigan qismi: har safar kimdir qisqa havolani bossa, shu endpoint ishga tushadi.
package main
import (
"fmt"
"net/http"
"net/http/httptest"
"strings"
)
func makeRedirectHandler(store *Store) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
code := strings.TrimPrefix(r.URL.Path, "/")
record, ok := store.Get(code)
if !ok {
w.WriteHeader(http.StatusNotFound)
return
}
http.Redirect(w, r, record.OriginalURL, http.StatusFound)
}
}
func main() {
store := NewStore()
store.Save(&URLRecord{Code: "aB3xZ", OriginalURL: "https://godasturchi.uz"})
handler := makeRedirectHandler(store)
req := httptest.NewRequest("GET", "/aB3xZ", nil)
rec := httptest.NewRecorder()
handler(rec, req)
fmt.Println(rec.Code, rec.Header().Get("Location"))
}http.Redirect(w, r, url, http.StatusFound) — brauzerga "302 Found" statusi VA Location sarlavhasi orqali "boshqa manzilga qara" degan ko'rsatma yuboradi ("HTTP Status Codes" darsini eslang). Brauzer bu javobni ko'rgach, AVTOMATIK ravishda Location sarlavhasida ko'rsatilgan manzilga o'tadi — foydalanuvchi buni sezmaydi ham, hammasi bir zumda sodir bo'ladi.
strings.TrimPrefix(r.URL.Path, "/") — kelgan yo'l (/aB3xZ)dan boshidagi / belgisini olib tashlab, faqat kodning o'zini (aB3xZ) qoldiradi. Agar kod storeda topilmasa, http.StatusNotFound (404) qaytariladi — bu foydalanuvchiga "bunday qisqa havola mavjud emas" deganidir.
>_ Exercise
Har bir muvaffaqiyatli yo'naltirishda bosishlar sonini oshiring.
- •makeRedirectHandler ichida, yo'naltirishdan OLDIN record.Clicks++ qiling
- •Ikki marta ketma-ket yo'naltirish so'rovi yuboring, so'ng record.Clicks qiymatini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
http.Redirect va Location sarlavhasi orqali brauzerni boshqa manzilga avtomatik yo'naltirish mumkin; bu jarayonda record'ning holatini (masalan bosishlar sonini) ham yangilash mumkin.
NEXT UP
Click Analytics
$ go run main.go
Kodingizni ishga tushiring