Click Analytics
Bosishlar tahlili
Do'kon egasi qaysi mahsulot ko'proq sotilganini bilishni xohlagani kabi, havola egasi ham qaysi qisqa havola ko'proq bosilganini bilishni xohlaydi. Endi biz Redirect endpoint'da hisoblab borilayotgan Clicks sonini tashqariga — alohida statistika endpoint'i orqali — ko'rsatamiz.
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"strings"
)
type StatsResponse struct {
Code string `json:"code"`
Clicks int `json:"clicks"`
}
func makeStatsHandler(store *Store) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
code := strings.TrimPrefix(r.URL.Path, "/stats/")
record, ok := store.Get(code)
if !ok {
w.WriteHeader(http.StatusNotFound)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(StatsResponse{Code: record.Code, Clicks: record.Clicks})
}
}
func main() {
store := NewStore()
store.Save(&URLRecord{Code: "aB3xZ", OriginalURL: "https://godasturchi.uz", Clicks: 42})
handler := makeStatsHandler(store)
req := httptest.NewRequest("GET", "/stats/aB3xZ", nil)
rec := httptest.NewRecorder()
handler(rec, req)
fmt.Println(rec.Body.String())
}E'tibor bering: makeStatsHandler va oldingi darsdagi makeRedirectHandler — IKKALASI HAM bir xil Storega murojaat qiladi, lekin har biri O'Z vazifasiga ega ("Service Boundaries" darsidagi tamoyil): Redirect — foydalanuvchini yo'naltiradi VA hisoblaydi, Stats — faqat hisoblangan ma'lumotni O'QIB, JSON sifatida qaytaradi. Bu ikkalasi ORASIDA hech qanday to'g'ridan-to'g'ri bog'liqlik yo'q — ular faqat umumiy Store orqali "gaplashadi".
>_ Exercise
Statistikaga havola yaratilgan vaqtini ham qo'shing.
- •StatsResponse struct'iga OriginalURL string maydonini json:"original_url" teg bilan qo'shing
- •makeStatsHandler ichida, javobga record.OriginalURL'ni ham qo'shing
- •record'ni OriginalURL="https://go.dev", Clicks=5 bilan yaratib, stats so'rovi yuboring va javob tanasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Bitta umumiy Store ustida turli maqsadli endpoint'lar (yo'naltirish, statistika) qurish mumkin — har biri o'z vazifasiga ega bo'lib, ular bir-biridan mustaqil ishlaydi.
NEXT UP
Rate Limiting
$ go run main.go
Kodingizni ishga tushiring