LINUX.ORG.RU

Какой код вы используете в REST API для ненайденных ресурсов?

 ,


0

4

Вроде бы рекомендуют не использовать 404, потому что это слишком общий код ошибки:

There are many layers of software that can return 404 to a request, some of which you may have no control over:

Misconfigured client hitting the wrong URL

Misconfigured proxies (client end and server end)

Misconfigured load balancers

Misconfigured routing tables in the server application

Returning HTTP 404 for «thing not found» is almost like returning HTTP 500 - it could mean the thing doesn’t exist, or it could mean something went wrong; the client cannot be sure which.

https://github.com/stickfigure/blog/wiki/How-to-(and-how-not-to)-design-REST-APIs#rule-8-dont-use-404-to-indicate-not-found

Поэтому в проектах используем 410 для обозначения ситуации, когда объект не найден.

Но сегодня столкнулся с проблемой: Safari закешировал ответ 410 на конкретную GET ручку с двумя параметрами, один из которых входит в путь ручки в виде uuid, а второй - необязательная дата после знака “?”.

Проект на fastapi, и для тестирования запросов используется встроенный swagger.

Путь у ручки вот такой: «/{uuid}/test?date_=2025-06-02», где дату можно не указывать по дефолту.

Указываешь дату - запрос корректно работает, а не указываешь - получаешь 410.

В итоге потратил час на отладку, пока не выяснилось, что в хроме ручка в Swagger работает корректно и возвращает результат при пустой дате вместо ошибки 410.

Какие коды для обозначения ненайденных ресурсов вы используете в своих веб-сервисах с REST API и почему?


Ответ на: комментарий от Obezyan

Поэтому в джанге (DRF) ошибки валидации - это 400 код 🤦🏿. Это от того что тебя «толкового» советчика не слушали. Вы ж напару с фирфаксом и сисьадминами всякими много этих приложений написали (0) и фреймворков потыкали. Максимум в гугле по паре ссылок сходили

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

не жри дерьмо… а ты попробуй мне запрети

Мы и не сможем запретить, у вас слишком сильно в голове на рано, это видно большинству в этой теме, поэтому все что мы можем сказать - приятного аппетита.

Obezyan
()
Ответ на: комментарий от rtxtxtrx

Поэтому в джанге (DRF) ошибки валидации - это 400 код 🤦🏿.

Вы умудрились обоссать сами себя. Обтекайте:

By default this exception results in a response with the HTTP status code "401 Unauthenticated", but it may also result in a "403 Forbidden" response, depending on the authentication scheme in use. See the authentication documentation for more details.

источник: https://www.django-rest-framework.org/api-guide/exceptions/#:~:text=AuthenticationFailed,-Signature%3A%20AuthenticationFailed(detail&text=Raised%20when%20an%20incoming%20request,the%20authentication%20scheme%20in%20use.

Это от того что тебя «толкового» советчика не слушали. Вы ж напару с фирфаксом и сисьадминами всякими много этих приложений написали (0) и фремворков потыкали. Максимум в гугле по паре ссылок сходи

В молодости приложил лапку к созданию Codeigniter, был такой шустрый фреймворк. В более зрелом возрасте участвовал в создании Slim 2. Не бог весть что, но на большее не было времени.

Obezyan
()
Ответ на: комментарий от rtxtxtrx

Читайте до полного просветления чтобы не путать тёплое с мягким: https://mobasshirbhuiya.medium.com/django-rest-framework-errors-handling-with-validationerror-and-apiexception-cfe20e7ef7b0 - специально для мидлов написано.

Obezyan
()
Ответ на: комментарий от Obezyan

400й статус означает что проблема в самой конструкции запроса отправленной на сервер

и тут тебя чатгпт подвел, показав откуда все твои знания высосаны

один не может понять смысла прочитанного, другой докопался, что я 204 и 206 код спутал (будто я их должен помнить)

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

Вы продолжаете сами себя обоссывать, это даже мило.

Я написал:

400й статус означает что проблема в самой конструкции запроса отправленной на сервер

т.е. ошибка валидации запроса.

DRF говорит тоже самое, то что вы выше привели:

Handling: These exceptions are often caught by DRF’s validation process, and they result in a 400 Bad Request response to the client by default.

Тоже говорит и MDN:

The HTTP 400 Bad Request client error response status code indicates that the server would not process the request due to something the server considered to be a client error. The reason for a 400 response is typically due to malformed request syntax, invalid request message framing, or deceptive request routing.

Клоун говорит одно, а DRF, MDN и обезьяна - другое. Кто прав вопрос риторический.

Obezyan
()
Ответ на: комментарий от rtxtxtrx

я 204 и 206 код спутал (будто я их должен помнить)

ну так, а куда вы лезете если не владеете предметом?

стыдно быть вами, спокойной ночи.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от Obezyan

Через запятую слова читал?

invalid request message framing

Message в данном контексте - это тело сообщения. Это же словочетания означает, что переданы неправильные поля, их значения и тп 🤡. И нет мацилла - это не официальная документация. Официальная - это RFC, но там тоже самое написано, то что ты не можешь вдуплить смысол - лишь твои проблемы.

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

500-ая ошибка от Nginx означает, что у тебя приложение свалилось и нужно его перезапустить, если ты будешь своим приложением его возвращать

Допустим, у приложения отвалилась БД и оно не может продолжать работу. Что оно должно вернуть, по-вашему?

Nervous ★★★★★
()
Ответ на: комментарий от rtxtxtrx

400-ую. Универсальную

Так ведь пользователь-то не виноват, что у вас БД отвалилась. И что бы он со своей стороны ни делал (в рамках HTTP), исправить он ничего не сможет. Отсюда 5xx — ошибка на стороне сервера.

Вот если 400 ему вернулось в ответ на невалидный ввод — он может ошибку проанализировать, исправить и иметь успех.

Почувствуйте разницу.

Nervous ★★★★★
()
Ответ на: комментарий от rtxtxtrx

Иногда оторпь берет от того что часть софта пишут вот такие вот специалисты.

Казалось бы, ну есть RFC, ну открой и прочитай, но нет, будет до конца позорится отстаивая свой эффект Даннинга-Крюгера.

И ведь элементарная вещь же, ничего сложного в понимании статусов ответов нет.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

2XX - все норм чел, бери что дали (номальные ответы)

3XX - ты адресом ошибся, тебе вон туда (редиректы)

4XX - ты базар фильтруй и попробуй еще раз (ошибки на стороне клиента)

5XX - ларек сгорел, приходи попзжа, фиксики уже получили уведомление о этой проблеме (ошибки на стороне сервера)

если у тебя иначе, надеюсь мне (и никому другому) никогда не попадутся разработанные тобой приложения.

Noob_Linux ★★★★
()
Ответ на: комментарий от Noob_Linux

надеюсь, ты свое первое когда-нибудь допишешь. просто фееричный бред. как и в остальных темах про btrfs или мой любимый flatpak

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

У тебя какая то шиза, я не писал в этих тредах.

А про коды ответов я тебе как человек которому деньги платят за это самое ваше программирование. Так что и этот язвительный комент не по адресу.

Noob_Linux ★★★★
()
Ответ на: комментарий от Noob_Linux

Я еще раз ссылку кину API HH. Это API, спроектированное командой людей, а не кретинов, которые ничего кроме хеловорлдов не писали. Оно возвращает только 200, 302, 400, 401, 403 и 404 коды. Как и делается по науке. 500-ые ошибки только проксирующий сервер возвращает.

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

ты реально пример мудреца не способного абстрагироваться от воспринимаемой сущности до концепции слона

тобой приведённый пример есть подсистема сервера и очевидно по дизайну 5XX отвечает во первых другая подсистема - и даже возможно когда тобой указанная о-api-шка возвращает по твоим словам проксирующему серверу не валидное (али по таймауту ничего) - крч

шланговать то зйчм?

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

пример есть подсистема сервера и очевидно по дизайну 5XX отвечает во первых другая подсистема

как и везде за аппликухой на любой технологии стоит проксирующий сервер - шок! а еще, говорят, что вода мокрая

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от qulinxao3

ты реально пример мудреца не способного абстрагироваться от воспринимаемой сущности до концепции слона

Обезьян не претендует на мудреца, просто является тем кто создаёт подобные апи в компаниях с схожим или большим оборотом как упомянутый вами hh.ru

Сейчас я немного в отпуске, но после него буду помогать реализовывать новые фичи для такой маленькой конторы как DHL, связанное с QR codes for Parcel API. Большего сказать не могу тк NDA, и вообще, обезьян же под санкциями, кек.

Это я к тому что ваши жалкие апелляции к авторитету ххру выглядят забавно, но - не боле того.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от Obezyan

А аппеляции к DHL выглядят не забавно?

связанное с QR codes for Parcel API

Очень серьезная задача нужно замотивировать разрабов взять и прикрутить либу для генерации QR

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

А аппеляции к DHL выглядят не забавно?

Я просто показал что hh не потолок.

Очень серьезная задача нужно замотивировать разрабов взять и прикрутить либу для генерации QR

Ахаха, ещё предложите на js это сделать с десятками миллионов запросов ежедневно.

Ладно, я зря теряю время с идиотом. Рано или поздно вам встретится грамотный человек который просто выкинет вас за борт.

Obezyan
()
Ответ на: комментарий от rtxtxtrx

500-ые ошибки только проксирующий сервер возвращает

Возможно, приложение при проблемах (скажем, отвале БД) просто уходит в рестарт и не может обратно стартовать, пока проблема не разрешится (не стартует упавшая БД). Соответственно, 500 отдаёт не приложение, а потерявший бэкенд балансировщик/обратный прокси/шлюз/ингресс/шотамувас.

Почему бы и нет, собственно, вроде вполне работоспособная схема.

Не вполне понятно, что будет с уже обрабатываемыми запросами, ну да это не моя головная боль %)

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

искать давно протухшие треды месячной давности и ставить клоунов - ты это от обиды что ли? а что обижаться, если в очередной раз обосрался и чушь несешь

asdpm
()
Ответ на: комментарий от rtxtxtrx

В случае неполадок и сбоев, возможны ответы с кодом 503 и 500.

Вот выдержка по 500ки из документации что ты сослался. В 400 у них описаны ошибки валидация. Там в доке ровно так как я и описал. 500ки на то что приложение сломалось и его надо чинить. Возвращать 400 на то что бд не доступна (это квалифицируется как неполадка и сбой) никто в здравом уме не будет ибо это не вина клиента.

Noob_Linux ★★★★
()

Safari закешировал ответ 410

Я тебя удивлю. Не только сафари закеширут это. В этом весь цимис 410 – «финита ля комедия, рессурса нет и больше сюда не приходите».

PS: читайте стандарты, а не высеры-блоги.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от anonymous

200, 400, 500, 404 это основные, реже 302, перенаправление, но им в основном черные сеошники грешили и шарлатаны, нормальным людям не нужно его использовать, остальные коды только маргиналы используют

gobot ★★★★
()
Ответ на: комментарий от Obezyan

теряю время с идиотом. Рано или поздно вам встретится грамотный человек который просто выкинет вас за борт

он и тебя, такого же некомпетентного клоуна, выкинет, кстати

asdpm
()
Ответ на: комментарий от Obezyan

Ладно, я зря теряю время с идиотом. Рано или поздно вам встретится грамотный человек который просто выкинет вас за борт.

А вы его перлы про математику видели: https://www.linux.org.ru/search.jsp?q=%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&range=ALL&interval=ALL&user=rtxtxtrx&_usertopic=on

Избранные цитаты

математика != логике, а математикам нечего делать в программировании, пусть свою бесполезную математику в школе преподают

вот поэтому ее [математику] я бредом и считаю

ну математика такая же наука как теология. точнее у нас она наукой считается, а в западной академической среде нет (science and mathematics)

Я вот на 100% уверен, что из художника выйдет лучший программист чем из математика. Программисты из дизайнеров выходят неплохие

anonymous
()
Ответ на: комментарий от anonymous

Вообще не важны. Поисковикам на эти статусы срать как и браузерам. Поисковики вообще работают не с урлами, а со страницами. В айти много умственных инвалидов и шизофренников.

rtxtxtrx ★★★
()