Что за ошибка в программе 422
Почти все разработчики так или иначе постоянно работают с api по http, клиентские разработчики работают с api backend своего сайта или приложения, а бэкендеры "дергают" бэкенды других сервисов, как внутренних, так и внешних. И мне кажется, одна из самых главных вещей в хорошем API это формат передачи ошибок. Ведь если это сделано плохо/неудобно, то разработчик, использующий это API, скорее всего не обработает ошибки, а клиенты будут пользоваться молчаливо ломающимся продуктом.
За 7 лет я как поддерживал множество legacy API, так и разрабатывал c нуля. И я поработал, наверное, с большинством стратегий по возвращению ошибок, но каждая из них создавала дискомфорт в той или иной мере. В последнее время я нащупал оптимальный вариант, о котором и хочу рассказать, но с начала расскажу о двух наиболее популярных вариантах.
Если у вас примитивная бизнес-логика или API из 5 url, то в принципе это нормальный подход. Однако как-только бизнес-логика станет сложнее, то начнется ряд проблем.
REST скорее концепция, чем формат общения из чего следует неоднозначность использования статусов. Разработчики используют статусы как им заблагорассудится. Например, некоторые API при отсутствии сущности возвращают 404 и текст ошибки, а некоторые 200 и пустое тело.
Бэкенд разработчику в проекте непросто выбрать статус для ошибки, а клиентскому разработчику неочевидно какой статус предназначен для того или иного типа ошибок бизнес-логики. По-хорошему в проекте придется держать enum для того, чтобы описать какие ошибки относятся к тому или иному статусу.
Когда бизнес-логика приложения усложняется, начинают делать как-то так:
№2: На все 200
Есть другой подход, даже более старый, чем REST, а именно: на все ошибки связанные с бизнес-логикой возвращать 200, а уже в теле ответа есть информация об ошибке. Например:
На самом деле формат зависит от вас или от выбранной библиотеки для реализации коммуникации, например JSON-API.
В некоторых случаях, если есть библиотека десериализации данных, она может взять часть работы на себя. Писать SDK вокруг такого подхода проще нежели вокруг той или иной имплементации REST, ведь реализация зависит от того, как это видел автор. Кроме того, теперь никто не вызовет случайное срабатывание alert в мониторинге из-за того, что выбрал неудачный код ошибки.
Но неудобства тоже есть:
Избыточность полей при передаче данных, т.е. нужно всегда передавать 2 поля: для данных и для ошибки. Это усложняет чтение логов и написание документации.
При использовании средств отладки (Chrome DevTools) или других подобных инструментов вы не сможете быстро найти ошибочные запросы бизнес логики, придется обязательно заглянуть в тело ответа (ведь всегда 200)
нельзя делать повторы для неудавшихся GET запросов (на backend) на реверс-прокси (например, nginx) по указанной выше причине
имеются проблемы с документированием – swagger и ApiDoc не подходят, а удобных аналогов я не нашел
Итог: Для сложной бизнес-логики с большим количеством типов ошибок такой подход лучше, чем расплывчатый REST, не зря в проектах c “разухабистой” бизнес-логикой часто именно такой подход и используют.
№3: Смешанный
400 – ошибка бизнес логики
остальное ошибки в транспорте
Мы можем расширять объект ошибки для детализации проблемы, если хотим. С мониторингом все как во втором варианте, дописывать парсинг придется, но и риска “стрельбы” некорректными alert нету. Для документирования можем спокойно использовать Swagger и ApiDoc. При этом сохраняется удобство использования инструментов разработчика, таких как Chrome DevTools, Postman, Talend API.
Итог: Использую данный подход уже в нескольких проектах, где множество типов ошибок и все крайне довольны, как клиентские разработчики, так и бэкендеры. Внедрение новой ошибки не вызывает споров, проблем и противоречий. Данный подход объединяет преимущества первого и второго варианта, при этом код более читабельный и структурированный.
Самое главное какой бы формат ошибок вы бы не выбрали лучше обговорить его заранее и следовать ему. Если эту вещь пустить на “самотек”, то очень скоро обработка ошибок в проекте станет невыносимо сложной для всех.
P.S. Иногда ошибки любят передавать массивом
Но это актуально в основном в двух случаях:
Когда наш API выступает в роли сервиса без фронтенда (нет сайта/приложения). Например, сервис платежей.
Когда в API есть url для загрузки какого-нибудь длинного отчета в котором может быть ошибка в каждой строке/колонке. И тогда для пользователя удобнее, чтобы ошибки в приложении сразу показывались все, а не по одной.
Как правило, специалисты по ПК называют «Windows Update Error Code 422» как тип «ошибки времени выполнения». Когда дело доходит до Windows Update, инженеры программного обеспечения используют арсенал инструментов, чтобы попытаться сорвать эти ошибки как можно лучше. К сожалению, некоторые критические проблемы, такие как ошибка 422, часто могут быть упущены из виду.
Что запускает ошибку времени выполнения 422?
Вполне вероятно, что при загрузке Windows Update вы столкнетесь с «Windows Update Error Code 422». Причины сбоев обработки можно отличить, классифицируя ошибки 422 следующим образом:.
Ошибка 422 Crash - это типичная ошибка «Windows Update Error Code 422», которая приводит к полному завершению работы программы. Это возникает, когда Windows Update не реагирует на ввод должным образом или не знает, какой вывод требуется взамен.
Утечка памяти «Windows Update Error Code 422» - если есть утечка памяти в Windows Update, это может привести к тому, что ОС будет выглядеть вялой. Есть некоторые потенциальные проблемы, которые могут быть причиной получения проблем во время выполнения, с неправильным кодированием, приводящим к бесконечным циклам.
Ошибка 422 Logic Error - «логическая ошибка», как говорят, генерируется, когда программное обеспечение получает правильный ввод, но генерирует неверный вывод. Он материализуется, когда исходный код Microsoft Corporation ошибочен из-за неисправного дизайна.
Типичные ошибки Windows Update Error Code 422
Частичный список ошибок Windows Update Error Code 422 Windows Update:
- «Ошибка программы Windows Update Error Code 422. «
- «Windows Update Error Code 422 не является программой Win32. «
- «Windows Update Error Code 422 столкнулся с проблемой и закроется. «
- «К сожалению, мы не можем найти Windows Update Error Code 422. «
- «Windows Update Error Code 422 не может быть найден. «
- «Проблема при запуске приложения: Windows Update Error Code 422. «
- «Не удается запустить Windows Update Error Code 422. «
- «Windows Update Error Code 422 остановлен. «
- «Windows Update Error Code 422: путь приложения является ошибкой. «
Ошибки Windows Update Error Code 422 EXE возникают во время установки Windows Update, при запуске приложений, связанных с Windows Update Error Code 422 (Windows Update), во время запуска или завершения работы или во время установки ОС Windows. Запись ошибок Windows Update Error Code 422 внутри Windows Update имеет решающее значение для обнаружения неисправностей электронной Windows и ретрансляции обратно в Microsoft Corporation для параметров ремонта.
Создатели Windows Update Error Code 422 Трудности
Большинство проблем Windows Update Error Code 422 связаны с отсутствующим или поврежденным Windows Update Error Code 422, вирусной инфекцией или недействительными записями реестра Windows, связанными с Windows Update.
«Property not found» обычно является ошибкой (ошибкой), обнаруженных во время выполнения. Разработчики Microsoft Corporation обычно оценивают Windows Operating System с помощью серии модулей для удаления ошибок в соответствии с отраслевыми стандартами. К сожалению, иногда ошибки, такие как ошибка 422, могут быть пропущены во время этого процесса.
Что вызывает ошибку 422 во время выполнения?
«Property not found» чаще всего может возникать при загрузке Windows Operating System. Рассмотрим распространенные причины ошибок ошибки 422 во время выполнения:
Ошибка 422 Crash - Ошибка 422 может привести к полному замораживанию программы, что не позволяет вам что-либо делать. Обычно это происходит, когда Windows Operating System не может обработать данные в удовлетворительной форме и поэтому не может получить ожидаемый результат.
Утечка памяти «Property not found» - при утечке памяти Windows Operating System это может привести к медленной работе устройства из-за нехватки системных ресурсов. Возможные причины включают сбой Microsoft Corporation для девыделения памяти в программе или когда плохой код выполняет «бесконечный цикл».
Error 422 Logic Error - Ошибка программной логики возникает, когда, несмотря на точный ввод от пользователя, производится неверный вывод. Когда точность исходного кода Microsoft Corporation низкая, он обычно становится источником ошибок.
В большинстве случаев проблемы с файлами Property not found связаны с отсутствием или повреждением файла связанного Windows Operating System вредоносным ПО или вирусом. Как правило, самый лучший и простой способ устранения ошибок, связанных с файлами Microsoft Corporation, является замена файлов. Если ошибка Property not found возникла в результате его удаления по причине заражения вредоносным ПО, мы рекомендуем запустить сканирование реестра, чтобы очистить все недействительные ссылки на пути к файлам, созданные вредоносной программой.
Классические проблемы Property not found
Эти проблемы Windows Operating System, связанные с Property not found, включают в себя:
- "Ошибка приложения Property not found."
- «Ошибка программного обеспечения Win32: Property not found»
- «Property not found должен быть закрыт. «
- «Не удается найти Property not found»
- «Property not found не может быть найден. «
- «Ошибка запуска в приложении: Property not found. «
- «Не удается запустить Property not found. «
- «Property not found остановлен. «
- «Property not found: путь приложения является ошибкой. «
Причины проблем Property not found
Проблемы Property not found могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с Property not found, или к вирусам / вредоносному ПО.
Эксперты обычно называют «Connection to type library or object library for remote process has been lost» «ошибкой времени выполнения». Разработчики программного обеспечения пытаются обеспечить, чтобы программное обеспечение было свободным от этих сбоев, пока оно не будет публично выпущено. Поскольку разработчики программного обеспечения пытаются предотвратить это, некоторые незначительные ошибки, такие как ошибка 442, возможно, не были найдены на этом этапе.
Почему происходит ошибка времени выполнения 442?
Наиболее распространенные вхождения «Connection to type library or object library for remote process has been lost» проблемы при загрузке Windows Operating System. Это три основных триггера для ошибок во время выполнения, таких как ошибка 442:
Ошибка 442 Crash - Ошибка 442 остановит компьютер от выполнения обычной программной операции. Если данный ввод недействителен или не соответствует ожидаемому формату, Windows Operating System (или OS) завершается неудачей.
Утечка памяти «Connection to type library or object library for remote process has been lost» - этот тип утечки памяти приводит к тому, что Windows Operating System продолжает использовать растущие объемы памяти, снижая общую производительность системы. Потенциальные триггеры могут быть «бесконечным циклом», или когда программа выполняет «цикл» или повторение снова и снова.
Ошибка 442 Logic Error - «логическая ошибка», как говорят, генерируется, когда программное обеспечение получает правильный ввод, но генерирует неверный вывод. Виновником в этом случае обычно является недостаток в исходном коде Microsoft Corporation, который неправильно обрабатывает ввод.
Microsoft Corporation проблемы файла Connection to type library or object library for remote process has been lost в большинстве случаев связаны с повреждением, отсутствием или заражением файлов Windows Operating System. Как правило, любую проблему, связанную с файлом Microsoft Corporation, можно решить посредством замены файла на новую копию. Запуск сканирования реестра после замены файла, из-за которого возникает проблема, позволит очистить все недействительные файлы Connection to type library or object library for remote process has been lost, расширения файлов или другие ссылки на файлы, которые могли быть повреждены в результате заражения вредоносным ПО.
Типичные ошибки Connection to type library or object library for remote process has been lost
Усложнения Windows Operating System с Connection to type library or object library for remote process has been lost состоят из:
- «Ошибка программы Connection to type library or object library for remote process has been lost. «
- «Connection to type library or object library for remote process has been lost не является программой Win32. «
- «Извините за неудобства - Connection to type library or object library for remote process has been lost имеет проблему. «
- "Файл Connection to type library or object library for remote process has been lost не найден."
- "Connection to type library or object library for remote process has been lost не найден."
- "Ошибка запуска программы: Connection to type library or object library for remote process has been lost."
- «Не удается запустить Connection to type library or object library for remote process has been lost. «
- «Ошибка Connection to type library or object library for remote process has been lost. «
- «Неверный путь к программе: Connection to type library or object library for remote process has been lost. «
Ошибки Connection to type library or object library for remote process has been lost EXE возникают во время установки Windows Operating System, при запуске приложений, связанных с Connection to type library or object library for remote process has been lost (Windows Operating System), во время запуска или завершения работы или во время установки ОС Windows. Важно отметить, когда возникают проблемы Connection to type library or object library for remote process has been lost, так как это помогает устранять проблемы Windows Operating System (и сообщать в Microsoft Corporation).
Причины проблем Connection to type library or object library for remote process has been lost
Большинство проблем Connection to type library or object library for remote process has been lost связаны с отсутствующим или поврежденным Connection to type library or object library for remote process has been lost, вирусной инфекцией или недействительными записями реестра Windows, связанными с Windows Operating System.
Более конкретно, данные ошибки Connection to type library or object library for remote process has been lost могут быть вызваны следующими причинами:
Но вот с чем RFC совершенно не помогает — это с вопросом, а что собственно клиенту или прокси делать с ошибкой. Как мы обсуждали, ошибки могут быть устранимыми или неустранимыми. Если ошибки неустранимая, то клиентам по большому счёту наплевать на всю эту петрушку со статус-кодами и заголовками, а уж промежуточным прокси тем более. Для этого на самом деле трёх кодов было бы достаточно:
- 400 для персистентных ошибок (если просто повторить запрос — ошибка никуда не денется);
- 404 для статуса неопределённости (повтор запроса может дать другой результат);
- 500 для проблем на стороне сервера плюс заголовок Retry-After , чтобы дать понять клиенту, когда прийти снова.
Замечание: кстати, обратите внимание на проблему дизайна спецификации. По умолчанию все 4xx коды не кэшируются, за исключением: 404 , 405 , 410 , 414 . Мы не сомневаемся, что это было сделано из благих намерений, но подозреваем, что количество людей, знающих об этой тонкости, примерно равно количеству редакторов спецификации. В результате мы имеем множество ситуаций (автор лично разгребал последствия одной из них), когда 404 -ки были возвращены ошибочно, но клиент их закэшировал, тем самым продлив факап на неопределённое время.
Что касается устранимых проблем — то да, статус-коды в чем-то помогают. Некоторые из них вполне конкретны, например 411 Length Required . А некоторые — нет. Можно привести множество ситуаций, где под одним кодом прячутся разнородные ошибки:
400 Bad Request для ситуаций, когда часть параметров отсутствует или имеет недопустимое значение. От этой ошибки клиентам нет абсолютно никакого толку, если только в ответе не указано, какое конкретно поле имеет недопустимое значение — и вот как раз именно это стандарт и не стандартизирует! Да, конечно, можно самому стандарт придумать — но это как минимум противоречит идее прозрачности в REST.
NB: некоторые пуристы считают, что 400 означает проблемы с самим запросом, т.е. кривой URI, заголовок, невалидный JSON и т.д., а для логических ошибок с параметрами предлагают использовать 422 Unprocessable Entity или 412 Precondition Failed . Как вы понимаете, это влияет примерно ни на что.
403 Forbidden для ошибок аутентификации и/или авторизации. И вот тут есть множество совершенно разных Forbidden -ов, которые требует совершенно разных действий от клиента:
- токен авторизации отсутствует — надо предложить клиенту залогиниться;
- токен протух — надо выполнить процедуру подновления токена;
- токен принадлежит другому пользователю — обычно свидетельствует о протухании кэша;
- токен отозван — пользователь выполнил выход со всех устройств;
- злоумышленник брутфорсит авторизационный эндпойнт — надо выполнить какие-то антифродные действия.
Каждая 403 связана со своим сценарием разрешения, некоторые из них (например, брутфорсинг) вообще ничего общего не имеют с другими.
Таким образом, мы вполне естественным образом приходим к идее отдавать детальное описание ошибки в заголовках и/или теле ответа, не пытаясь изобрести новый код для каждой ситуации — абсолютно очевидно, что нельзя задизайнить по ошибке на каждый потенциально неправильный параметр вместо единой 400 -ки, например.
Замечание: авторы спецификации тоже это понимали, и добавили следующую фразу: ‘The response message will usually contain a representation that explains the status’. Мы с ними, конечно, полностью согласны, но не можем не отметить, что эта фраза не только делает кусок спецификации бесполезным (а зачем нужны коды-то тогда?), но и противоречит парадигме REST: другие агенты в многоуровневой системе не могут понять, что же там «объясняет» представление ошибки, и сама ошибка становится для них непрозрачной.
Это в свою очередь привело не только к распуханию номенклатуры кодов, но и размытию их значений. Многие разработчики просто не читают спецификации ¯\_(ツ)_/¯. Самый очевидный пример — это ошибка 401 Unauthorized : по спецификации она обязана сопровождаться заголовком WWW-Authenticate — чего, в реальности, конечно никто не делает, и по очевидным причинам, т.к. единственное разумное значение этого заголовка — Basic (да-да, это та самая логин-парольная авторизация времён Web 1.0, когда браузер диалоговое окно показывает). Более того, спецификация в этом месте расширяема, никто не мешает стандартизовать новые виды realm -ов авторизации — но всем традиционно всё равно. Прямо сейчас использование 401 при отсутствии авторизационных заголовков фактически является стандартом индустрии — и никакого WWW-Authenticate при этом, конечно, не шлётся.
А какие ваши предложения?
На самом деле есть три подхода к решению этой ситуации:
- 200 OK если сервер получил запрос, независимо от результата — ошибки исполнения запроса все равно возвращаются как 200 .
- 500 Internal Server Error если запрос до сервера не дошёл.
Можно ещё использовать 400 Bad Request для клиентских ошибок. Это чуть усложняет конструкцию, но позволяет пользоваться ПО и сервисами для организации API Gateway;
прибрать бардак. Включая, но не ограничиваясь:
Я буду признателен, если кто-то пошарит её на реддите, я сам по правилам реддита не могу.
Читайте также: