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 и почему?


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

Каких спецификаций? Какого протокола?

Ты серишь, как и все отреагировавшие на пост.

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

А реальные и приличные протоколы для api есть, например json-rpc, где головняка меньше, а возможностей больше.

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

Вот Perl, созданный лингвистом, в целом лучше спроектирован чем PHP от Лердоффа, который на программиста учился и создал язык без модулей с 100500 функциями в глобальной области. Творческий человек vs говнотехнарь. А математики создали хатчкель, лишп, алгол - языки с наркманским синтаксисом, которые нахер никому не нужны в проде

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

А математики создали

приблизительно всю вот эту электронную и информационную херню, в уютной тени которой мартышки бросаются жысонами, вися на хвосте.

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

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

rtxtxtrx ★★★
()

А если серьезно и отбросить стеб с этих недопрограммистов, дрочащих на статусы. То есть убер-фреймворки типа джанги, спринга. А есть микрофреймворки, которые очень популярны. В них кроме роутинга иногда бывает валидатор, а вот ORM и прочее ты прикручиваешь с боку. Они никак неиэ интегрированы, ошибки ORM автоматом в 404 не превращаются, когда сущность не найдена. При падении соединения Service Unavailable не показывает. Можно в каждом эндпоинте отлавливать все возможные ошибки по-честному, а можно не заморачиваться и добавить обработчик, который все ошибки будет (которые наследуются от Exception) превращать в json-нину с особым форматом. И вот тут 400-ый статус самый подходящий + клиентские либы бросают исключения, если статус в не диапазоне 200-299. С 404 тоже можно не заморачиваться. Браузер только если 401 статус на эндпоинте при авторизации возвращается пароль не запоминает и запоминает при 200 (либо вообще только на 200 реагирует). Статусы не нужны. REST API не пригоден уже если пилишь сайт + мобильное приложение, потому как под мобилку его еще придется переделывать. Лучше сразу Graphql делать.

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

А ничего, что js это искалеченный scheme, и у Эйха даже статья где-то была на эту тему?

Его позвали встроить scheme в браузер, а потом пришли манагеры и сказали, что язык должен быть похож на java, потому что та на хайпе была.

Так и появился язык-ублюдок, который ты нахваливаешь. А со scheme в браузере всего текущего фронтендового безумия просто не случилось бы.

Столяров кстати это знает и упоминал в том длинном интервью - у ведущего аж глаза округлились, ведь он считал, что js произошёл от сишки.

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

можно не заморачиваться

Да действительно, мы ведь тут не для того, чтобы соответствовать чьим-то ожыданиям. Хреначь всё подряд со статусом 200 и описаниями ошибок на китайском периода Западной Чжоу, пускай там разбираются — им за это деньги платят.

Нет, лучше со статусом 102, потому что мы — Бандар-лог! То, о чём Бандар-лог думает теперь, джунгли подумают позже!

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

Не вам. Я отвечал rtxtxtrx. После того как добавил его в игнор сообщение стало подглючивать и выглядеть как ответ вам, при обновлении страницы меняется на ответ ему.

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

ща Иноваторы вкуриваю ( перед этим скурил Леви «хакеры» от 1984 с добавкой 1994 с addandum 25 in english) и после откуренного 1 тома Полунова «от абака до компьютера» где-то в 2/7 второго (кста достоверно в детстве дома валялась книжка от абака до комьютера ещё эпохи до СНГ его же с Гутером)(было прочитано до пубертата 😱)

так вот «идея монолита» (это про то что стало I(ntegral)C(hipircuit)(откуда Iс откуда 1с) а потом БИС и СБИС

Информативней стало понимание(imho) флеймов в ойти-индустрии и хайп режим монолиты(мягко софтовые) на микро(не пико и даже не нано)сервисы закономерен

т.е закон мура вынуждает падению уровня вкатунов ибо «итаксойдёт»

т.е то что невежды (и подмигивают) унаследуют ещё Ницще не в Ницце тролли пока мог

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

про польскую нотацию впервые прочитал? мне кажется сами авторы лишпа ее часто упоминают. при реализации всяких калькуляторов для тренировки навыков программиздма вроде как учат выражение в rpn преобразовывать и выполнять. я думал в шарагах такое проходят

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

форт

4(5) книжек на русском к 1993-95

Броуди - это даже не столко форт сколько об архитектуре (до сих пор рекомендуют по design of sw)

Баранов Ноздрунов - Язык ФОРТ и его реализации 1988

Семёнов - Программирование на языке Форт :: оказался сетевым затейников http://book.itep.ru/1/intro1.htm

Бураго,Кириллип,Романовский - ФОРТ - язык для микропроцессоров 1989 :: Романовский вроде по алгоритмам дядка мудрый до сих пор

до сих пор на полке обретаются

там(в четвёрт) реальне забавна реализация i80? асма - осень лако(нично|красочно)

впервые?!

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

Тебе намекают, что польская нотация не одна, и обратная от калькуляторов к лиспам никакого отношения не имеет.

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

anonymous
()

Ошибки для rest это сигнализация об ошибках. Отсутствие данных это не ошибочная ситуация - ошибка это отсутствие самого ресурса. Если ошибок в переданных параметрах нет, а просто чего то не нашли, то можно вернуть 200 с {«data»:[]}, и 204. Если ошибка действительно есть, то надо просигнализировать что это за ошибка для этого можно использовать и 400, 404, 405, 500 и 501 в зависимости от того почему при пустой дате, которая разрешена, ресурс не доступен.

410 это прям сильно не туда.

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

тут фанаты смузи, начитавшиеся джавобоев типа роберта мартина и мартина фаулера. нужно спрашивать у тех кто пользуется api, например, на фронте, в приложениях… и вот там как раз абсолютно плевать какой статус сервер вернул. там по любому нужно жисон распарсить, потом проверить есть ли поле data или наоборот нету ли какого error… споры на эту тему не имеют смысла… а теперь представь как собирается целое совещание смузихлебов, где 5 рыл, сидя обсуждают какие статусы вернуть надо, или аналитики пишут портянки спецификаций, тупо тратя деньги работовладельца, а главное можно было там ютуб на рабочем месте посмотреть с тем же результатом. это как показатель бесмысленности всего этого сраного айти, где шизы 90% времени какой-то херней занимаются и почему-то обижаются когда ты не хочешь страдать ею вместе с ними. мне кажется это вообще противоречит скраму. нужно пилить mvp, побыстрее показать его кредиторам, чтобы получить доп финансирование… ну или же искать новый стартап, так как этот разорится из-за клованов… и вот тут понимаешь почему у погроммистов главным ставят какого-то левого хера или вообще бабу, ведь они вместо решения задач всегда норовят обмазываться стандартами, реализовать все паттерны из букваря ява-обрыгана и запилить какое ddd… и все ради строчки в резюме, чтобы потом свалить в закат на самокате

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

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

asdpm
()

по идее 404 при отсутствии ресурса /user/{id} 204 при пустом ответе /user?id={id}

не очень понятно, зачем при 404 в общем случае различать ошибку роутинга от ошибки отсутствия ресурса в контроллере: нет его и делать с ним ничего нельзя.

Чтобы различать можно что-то особенное в теле или заголовке ответа писать.

zudwa
()