Обработка ошибок REST API в Италии
Ошибки RFC 7807 problem+json, стабильные коды и рекомендации по повторам для REST API в Италии.
Архитектура — RFC 7807 problem+json везде в Италии
Каждый ответ 4xx/5xx использует Content-Type: application/problem+json с полями: type (стабильный URI), title, status, detail, instance (request id) и расширяющие поля. type стабилен между версиями и ведёт в документацию с рекомендациями retry/fix. Всегда логируйте instance — поддержка пройдёт по нему end-to-end меньше чем за минуту.
Как подключить — Каталог типовых ошибок
invalid_vat (не совпало с VIES, retry после правки), invalid_sku (нет в каталоге Италия, правка), min_qty_violation (ниже MOQ, правка), invalid_tax_rate (не совпало с IVA 22%, правка), idempotency_conflict (одинаковый key, разный body, правка), insufficient_inventory (эскалация или ожидание), SdI_unavailable (временно, retry с backoff). Полный каталог на /docs/errors.
Эксплуатация и пограничные случаи — Ошибки 5xx и идемпотентность
Ошибки 5xx означают, что запрос не зафиксирован. Мы логируем request id, поднимаем on-call и публикуем инциденты на странице статуса. Idempotency-ключи защищают вас: повторы с тем же ключом после 5xx никогда не списывают дважды. Наши SDK по умолчанию делают retry 5xx с экспоненциальным backoff (макс 3 попытки) — отключается, если нужен ручной контроль. Сбои Sistema di Interscambio (SdI) приходят асинхронно по webhook с подсказками для retry.
Частые вопросы
Каталог ошибок стабилен?
Да — type URI версионируются и мы никогда не переназначаем код. Новые добавляются аддитивно.
Как корреляровать логи?
В каждом ответе есть instance = request id (cm-req-…). Передайте в поддержку — мы пройдём end-to-end меньше чем за минуту.
SDK или raw HTTP?
SDK бросают типизированные исключения, соответствующие type URI — обычно проще, чем парсить JSON. Raw HTTP тоже работает.
А валидационные ошибки?
422 с массивом errors, по одной записи на проблемное поле — со стабильным кодом и человекочитаемым сообщением.
SdI_unavailable?
Временно — наш шлюз буферизует payload счёта и повторяет в SdI. Об успехе сообщит webhook.