Ошибка 500 в API: виноват сервер или запрос
Код 500 означает, что сервер упал при обработке запроса. Чинить нужно сервер, но часто падение вызывают конкретные данные в запросе, и их можно найти снаружи.
Что именно означает 500
Сервер принял запрос и не смог его обработать из-за внутренней ошибки, обычно необработанного исключения. Правильный сервер на неверные данные отвечает 400 или 422 с объяснением. Если вместо этого приходит 500, это ошибка сервера, даже когда её спровоцировал ваш запрос.
Как найти, что в запросе ломает сервер
Повторите запрос и посмотрите тело ответа: там бывает текст ошибки или traceId. Затем упрощайте запрос: уберите необязательные поля, замените значения на заведомо правильные, проверьте пустые строки, null, очень длинные значения и спецсимволы. Когда 500 пропадёт, последнее изменение и есть причина. По traceId или времени запроса разработчик найдёт исключение в логах.
curl -i -X POST https://api.example.com/orders -H "Content-Type: application/json" -d "@order.json"Чем 500 отличается от 502, 503 и 504
502 Bad Gateway и 504 Gateway Timeout отдаёт прокси или балансировщик: сервис за ним не ответил или ответил с ошибкой. 503 Service Unavailable означает, что сервис перегружен или на обслуживании. В этих случаях запрос обычно ни при чём, проблема в доступности сервиса.
Request failed with status code 500
Это сообщение библиотеки axios: она выбрасывает ошибку на любой ответ вне диапазона 2xx. Сам текст ничего не говорит о причине, смотрите error.response: код, заголовки и тело, которые прислал сервер.
try {
await axios.post('/api/orders', order);
} catch (error) {
// Request failed with status code 500: смотрите, что прислал сервер
console.log(error.response?.status, error.response?.headers, error.response?.data);
}Как не пропустить 500 в автотестах
Проверяйте код ответа отдельным правилом, а для каждого обязательного поля задавайте свою проверку. Тогда отчёт сразу скажет, что пришёл 500 и на каком запросе, а в Checkcraft рядом будут найденные по traceId записи логов.
Повторите это на своём API
Checkcraft — настольная программа: сохраняет проверки ответа API без кода и показывает, что не совпало. Начните с учебного примера, затем подставьте свои обезличенные данные. Free работает на Windows и Linux без ограничения срока.
Скачать FreeКак получить и запустить приложениеСкачивание без регистрации и почты, архив готов за пару минут. Состав бесплатной версии опубликован на странице тарифов.
Документация
Начните с примера по ссылкам и сопоставьте результат с требованием своей проверки.