Вдохновленный мыслью при просмотре вопроса « Правильный код состояния HTTP, когда ресурс доступен, но недоступен из-за разрешений », я воспользуюсь тем же сценарием, чтобы проиллюстрировать свой гипотетический вопрос.
Представьте, что я создаю веб-службу совместного использования автомобилей.
Предположим, следующее
GET /api/persons/angela/location
извлекает текущую позицию пользователя «angela». Только сама Анджела и возможный водитель, который собирается ее забрать, должны иметь возможность узнать ее местоположение, поэтому, если запрос не аутентифицирован для соответствующего пользователя, возвращается ответ 401 Unauthorized .
Также рассмотрите запрос
GET /api/persons/john/location
, когда ни один пользователь с именем john не зарегистрировался в системе. Ресурсов Джона нет, не говоря уже о местонахождении Джона, так что это, очевидно, возвращает 404 Not Found . Или нет?
Что, если я не хочу раскрывать, зарегистрирован ли john в системе?
(Возможно, имена пользователей взяты из небольшого пула университетских логинов, и здесь наблюдается очень активный кругозор группа в университетском городке, которая очень смутно смотрит на использование автомобилей, даже если вы объединяете их? Они могут делать запросы к URL-адресу для каждого пользователя, и если они получат 401 вместо 404, сделайте вывод, что пользователь является сборщиком автомобилей)
Имеет ли смысл возвращать 401 Unauthorized для этого запроса, даже если ресурс не существует и нет возможного набора учетных данных, который мог бы быть предоставлен в запросе, чтобы сервер возвращал 200 ?