Sobes.tech
Senior

¿Por qué en el manejador de API siempre se devuelve el estado 500? ¿Qué hay de malo con esto?

sobes.tech AI

Respuesta de la IA

Возвращать статус 500 (Internal Server Error) везде в API-хендлере — плохая практика, потому что этот статус означает, что на сервере произошла непредвиденная ошибка.

Проблемы такого подхода:

  • Отсутствие точной диагностики: Клиент не понимает, что именно пошло не так — была ли ошибка валидации, отсутствовали ли данные, или проблема на сервере.
  • Нарушение REST-стандартов: В HTTP есть множество кодов состояния, которые помогают клиенту правильно обработать ответ (например, 400 для ошибок клиента, 404 для не найденных ресурсов, 401 для неавторизованных запросов).
  • Сложности отладки: Если всегда возвращать 500, сложно быстро определить причину ошибки.

Правильный подход — возвращать разные коды статуса в зависимости от ситуации:

  • 200 OK — успешный запрос.
  • 400 Bad Request — ошибка в запросе (например, неверные параметры).
  • 401 Unauthorized — если пользователь не авторизован.
  • 404 Not Found — если ресурс не найден.
  • 500 Internal Server Error — для неожиданных ошибок сервера.

Пример на Go:

func handler(w http.ResponseWriter, r *http.Request) {
    id := r.URL.Query().Get("id")
    if id == "" {
        http.Error(w, "missing id", http.StatusBadRequest)
        return
    }

    data, err := getDataByID(id)
    if err == ErrNotFound {
        http.Error(w, "not found", http.StatusNotFound)
        return
    } else if err != nil {
        http.Error(w, "internal error", http.StatusInternalServerError)
        return
    }

    w.WriteHeader(http.StatusOK)
    w.Write(data)
}

Таким образом, правильное использование кодов статуса улучшает взаимодействие с клиентом и упрощает поддержку API.