Головна/Рецепти (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

Надішліть коректний create плюс одне поле, якого контракт не знає ("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.