Это довольно просто 404
.
Код состояния 404 (не найден) указывает, что исходный сервер не нашел текущее представление для целевого ресурса или не желает раскрывать, что он существует.
403
не прав, поскольку это означает, что пользователь не «авторизован» для доступа к этому ресурсу. Это подразумевает, что проблема лежит на стороне клиента. Но в этом случае просто нет ресурса.
501
не верно, поскольку это "означает, что сервер не поддерживает функции, необходимые для выполнения запроса. Это соответствующий ответ, когда сервер не распознает метод запроса и не способен поддерживать его для какого-либо ресурса ». В этом случае у сервера нет проблем с поддержкой запроса, просто ресурс не существует.
Обратите внимание, что «сервер» относится к веб-серверу . Вопрос не в том, поддерживает ли ваше приложение в целом некоторую функциональность, а в том, способен ли веб-сервер обрабатывать отправленный HTTP-запрос. Неправильно использовать коды состояния HTTP для указания такого типа высокоуровневого состояния приложения.
Также обратите внимание, что код состояния - это не просто частный контракт между вашим приложением и его пользователями. Все участники веб-стека - регистраторы, промежуточные кэши, браузеры и т. Д. c. - могут изменить свое поведение в зависимости от кода состояния. Вот почему важно зарезервировать такие вещи, как 5xx
для фактических ошибок сервера.
Подводя итог, поскольку ресурс с таким URI не существует, лучший способ предоставить полезную обратную связь - вернуть 404
, Если вы хотите различать guish между функциями, которые никогда не поддерживаются, и функциями, которые просто не поддерживаются для этого устройства, вам следует использовать механизм, отличный от кода состояния. К счастью, вы хорошо начали, перечислив доступные функции на /scan
.