Вроде бы рекомендуют не использовать 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.
Поэтому в проектах используем 410 для обозначения ситуации, когда объект не найден.
Но сегодня столкнулся с проблемой: Safari закешировал ответ 410 на конкретную GET ручку с двумя параметрами, один из которых входит в путь ручки в виде uuid, а второй - необязательная дата после знака “?”.
Проект на fastapi, и для тестирования запросов используется встроенный swagger.
Путь у ручки вот такой: «/{uuid}/test?date_=2025-06-02», где дату можно не указывать по дефолту.
Указываешь дату - запрос корректно работает, а не указываешь - получаешь 410.
В итоге потратил час на отладку, пока не выяснилось, что в хроме ручка в Swagger работает корректно и возвращает результат при пустой дате вместо ошибки 410.
Какие коды для обозначения ненайденных ресурсов вы используете в своих веб-сервисах с REST API и почему?