Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Обработка ошибок
error_handling

Обработка ошибок

Форматы ответов об ошибках, статусные коды, детали проблем (RFC 7807)

Обработка ошибок

Обработка ошибок — это неотъемлемая часть проектирования API. Хорошая стратегия обработки ошибок делает API предсказуемым, надежным и простым в отладке.

#Стандарт RFC 7807: поля и их назначение

ПолеТипОбязательноеОписаниеПример
typestringДаURI, указывающий на тип ошибкиhttps://api.example.com/errors/validation
titlestringДаКраткое, человекочитаемое описание"Validation Error"
statusintegerДаHTTP-статусный код400
detailstringДаПодробное описание причины"Email is required"
instancestringНетURI конкретного экземпляра ошибки/users/123
errorsarrayНетСписок полей с ошибками[{"field": "email", "message": "Required"}]

#Преимущества стандарта RFC 7807

  • Единообразие: Все ошибки имеют одинаковую структуру
  • Машинная читаемость: Клиентские библиотеки могут легко парсить и обрабатывать ошибки
  • Документация: URI в поле type может вести на страницу с подробной документацией
  • Расширяемость: Легко добавлять кастомные поля для специфических нужд

#Практический пример: Реализация обработки ошибок

HTTP-ответ при валидации:

HTTP/1.1 400 Bad Request Content-Type: application/problem+json { "type": "https://api.example.com/errors/validation", "title": "Validation Error", "status": 400, "detail": "Email is required", "instance": "/users", "errors": [ { "field": "email", "message": "Required" }, { "field": "password", "message": "Must be at least 8 characters" } ] }

Реализация на сервере (Node.js/Express):

// Middleware для обработки ошибок app.use((err, req, res, next) => { const problem = { type: err.type || 'https://api.example.com/errors/generic', title: err.title || 'Error', status: err.status || 500, detail: err.message || 'An error occurred' }; // Добавляем instance для конкретных ресурсов if (req.path) { problem.instance = req.path; } // Добавляем errors для валидационных ошибок if (err.validationErrors) { problem.errors = err.validationErrors; } res.status(problem.status).json(problem); }); // Пример использования const validateUser = (req, res, next) => { const errors = []; if (!req.body.email) { errors.push({ field: 'email', message: 'Required' }); } if (!req.body.password || req.body.password.length < 8) { errors.push({ field: 'password', message: 'Must be at least 8 characters' }); } if (errors.length > 0) { const err = new Error('Validation failed'); err.status = 400; err.type = 'https://api.example.com/errors/validation'; err.title = 'Validation Error'; err.validationErrors = errors; return next(err); } next(); };

#Процесс проектирования обработки ошибок (по этапам)

ЭтапДействияОтветственныеСроки
ПроектированиеОпределение типов ошибок, создание схемы Problem DetailsАрхитектор, Tech LeadНа этапе проектирования API
РазработкаРеализация middleware, обработка исключений, валидацияРазработчикиВ процессе разработки
ТестированиеТестирование различных сценариев ошибок, проверка форматовQA, DevOpsПеред PR и в CI
РелизДокументация ошибок, примеры для клиентовTechnical Writer, Release ManagerПри релизе
ПоддержкаМониторинг ошибок, анализ логов, улучшение сообщенийDevOps, Support TeamПостоянно

#Часто задаваемые вопросы (FAQ)

Q: Что такое RFC 7807 Problem Details? A: Стандартный формат ошибок: type, title, status, detail, instance; машиночитаемый, последовательный для всех API.

Q: Какой HTTP-статус код используется для 'Not Found'? A: Код 404 Not Found используется, когда сервер не может найти запрашиваемый ресурс. Это самый распространенный код для отсутствующих URL.

Q: Какой заголовок используется для указания на то, что клиент должен повторить запрос позже? A: Заголовок Retry-After используется в ответах с кодом 429 Too Many Requests или 503 Service Unavailable, чтобы указать клиенту, через сколько секунд или в какое время можно повторить запрос.

Q: Что означает статус код 409 Conflict? A: Код 409 Conflict используется, когда запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса (например, попытка создать ресурс с уже существующим ID).

Хорошая стратегия обработки ошибок делает API предсказуемым, надежным и простым в отладке.

Далее: Безопасность API