Главная/Рецепты (Cookbook)/Обработайте ошибки валидации ENУКРРУС API-справочник (ReDoc) ↗

Обработайте ошибки валидации

Спровоцируйте каждый вид отказа нарочно и ветвитесь по кодам так, как положено production-коду.

Обработка ошибок, написанная по реальности: каждый шаг провоцирует один режим отказа и проверяет точный error.code, по которому должна ветвиться ваша интеграция (Errors and Conventions).

Цель

Увидеть 400, 404, 409 и оба кода 422 вживую, каждый с полями конверта, которые нужны вашим логам и UI.

Предварительные условия

  • $CREDS_BASE, $TOKEN и провайдер, чья схема требует api_key (сценарий 01).

Шаги

1. Секрет, нарушающий схему → 422

Создайте с неверным секретным объектом (поле пропущено, лишние добавлены):

curl -s -X POST "$CREDS_BASE/v1/credentials" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{
    "provider_code": "'$CODE'",
    "name": "broken",
    "credentials": {"wrong_field": "x"}
  }'

Ожидаемый 422, error.code = "CREDENTIAL_SCHEMA_VALIDATION_FAILED"; error.details.errors указывает на проблемные поля, не эхо-повторяя ваши значения (Provider Schemas). Некорректная configuration падает так же — как CONFIGURATION_SCHEMA_VALIDATION_FAILED.

2. Неизвестное поле тела → 400

Отправьте корректное создание плюс одно поле, которого контракт не знает ("note": "hi"). Ожидаемый 400 INVALID_REQUEST — неизвестные поля отклоняются, а не молча выбрасываются.

3. Провайдер, которого не существует → 404

Создайте против no_such_provider. Ожидаемый 404 PROVIDER_NOT_FOUND — и помните: тот же код покрывает провайдеров, которых ваша роль не видит.

4. Устаревшая версия → 409

Создайте валидный credential, затем дважды сделайте PATCH с одной и той же version:

first = httpx.patch(url, headers=headers, json={"name": "renamed", "version": 1})
assert first.status_code == 200
second = httpx.patch(url, headers=headers, json={"name": "again", "version": 1})
assert second.status_code == 409
assert second.json()["error"]["code"] == "CREDENTIAL_VERSION_CONFLICT"

Ожидаемо: вторая запись проигрывает чисто — перечитайте ради свежей версии, затем повторите (Defaults and Lifecycle).

5. Конверт всегда один и тот же

Каждый сбой выше нёс error.code, error.message, error.details, error.correlation_id. Ветвитесь по коду; логируйте correlation id; пользователям показывайте собственные слова. Полная таблица кодов: Error Codes.

Проверено тестом test_s10_handle_validation_errors.