Приложение заявок показывает «Ошибка сохранения» — диагностируйте по цепочке
Веб-приложение на helpme.plz создаёт заявку в поддержку. Номер заявки автозаполняется сервисом-генератором (формат: две буквы + пять цифр, напр. AA12345), есть свободный текст и кнопка Сохранить. При сохранении запрос уходит на сервер и пишется в базу данных.
Действие: заполнить автономер + текст «Ничего не работает!», нажать Сохранить
Результат: «Ошибка сохранения»
Цепочка: клиент (браузер) -> сеть -> сервер (валидация) -> база данных
Два вопроса: (1) что сделать, чтобы найти причину, и (2) где в цепочке клиент→сеть→сервер→БД может быть баг? Определите причину.
Сначала соберите данные: откройте DevTools для разбора запроса/ответа, включите прокси, прочитайте логи приложения и отладьте бэкенд, если есть доступ. Затем рассуждайте по всей цепочке: дубликат номера заявки, кириллический символ от генератора, серверная валидация, отклоняющая номер или текст, упавшая БД, отказ сети, медленный/истёкший ответ или некорректный запрос от фронта.
- ✗Прыгать к одной причине без сбора данных запроса/ответа
- ✗Игнорировать целые звенья цепочки (сеть, БД, валидация)
- ✗Считать, что номер от генератора всегда валиден
- →Как статус-код ответа сузит, какое звено отказало?
- →Какие причины прокси даст подтвердить там, где DevTools одних мало?
Две части: как расследовать, затем где может сломаться.
Как найти причину:
- Откройте DevTools → Network и прочитайте запрос сохранения и его ответ (статус-код, тело).
- Включите прокси/снифер, чтобы увидеть и переиграть точный запрос.
- Прочитайте логи приложения и сервера.
- Если есть доступ к коду бэкенда — отладьте обработчик сохранения напрямую.
Начните с ответа: статус-код почти всегда сразу указывает на отказавшее звено.
400 / 422 -> серверная валидация отклонила номер или текст
409 -> конфликт уникальности: заявка с таким номером уже есть
500 -> упал сам обработчик или БД за ним
504 -> таймаут: запрос дошёл, ответ не вернулся вовремя
(нет ответа) -> запрос не ушёл: сеть или некорректный запрос с фронта
Где может жить баг, если идти по цепочке:
- Клиент: некорректный запрос с фронта, неверный content type, не тот endpoint или версия.
- Сеть: запрос не дошёл до сервера или истёк по таймауту.
- Серверная валидация: отклоняет формат номера, отклоняет кириллицу в тексте — или генератор сам выдал кириллический символ внутрь номера.
- Данные: заявка с таким номером уже существует (конфликт уникальности).
- База данных: недоступна, или сервер отвечает медленно под высокой нагрузкой.
Дисциплина в том, чтобы сначала прочитать реальный ответ, а не гадать об одной причине.