~/کدولاگ
→ بررسی اجمالی پروژه
ساخت یک کوتاه‌کننده لینک با Go

بخش ۳: Endpoint کوتاه‌سازی

پذیرش یک URL بلند، اعتبارسنجی آن، ذخیره‌سازی، و بازگرداندن یک کد کوتاه base62.

وقت آن رسیده که یک URL بلند را به یک URL کوتاه تبدیل کنیم. یک JSON می‌پذیریم، URL را اعتبارسنجی می‌کنیم، یک سطر درج می‌کنیم و id حاصل را رمزگذاری می‌کنیم.

هندلر

func (s *Server) shorten(w http.ResponseWriter, r *http.Request) {
	var in struct{ URL string `json:"url"` }
	if err := json.NewDecoder(r.Body).Decode(&in); err != nil {
		http.Error(w, "bad json", http.StatusBadRequest)
		return
	}
	if _, err := url.ParseRequestURI(in.URL); err != nil {
		http.Error(w, "invalid url", http.StatusUnprocessableEntity)
		return
	}

	id, err := s.repo.Insert(r.Context(), in.URL)
	if err != nil {
		http.Error(w, "server error", http.StatusInternalServerError)
		return
	}
	code := base62.Encode(id)

	json.NewEncoder(w).Encode(map[string]string{"code": code})
}

اعتبارسنجی از ابتدا، یک درج ساده، و یک کد قطعی. بخش چهارم مسیر ریدایرکت را وصل می‌کند و یک لایه‌ی کش اضافه می‌کند تا لینک‌های داغ هرگز به دیتابیس نرسند.