ساخت یک کوتاهکننده لینک با 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})
}
اعتبارسنجی از ابتدا، یک درج ساده، و یک کد قطعی. بخش چهارم مسیر ریدایرکت را وصل میکند و یک لایهی کش اضافه میکند تا لینکهای داغ هرگز به دیتابیس نرسند.