GoDasturchi
Redirect Endpoint

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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