I am building a RESTful protocol for Dynamic Carpooling applications, for my Computer Science thesis.
In the Protocol I also have to formally specify the HTTP status code for each operation. I've got this "privacy related" problem. Suppose the following:
GET /api/persons/angela/location
Retrieves the current position of user "angela". Очевидно, что не каждый должен иметь возможность получить результат. Только сама Анжела и возможный водитель, который собирается ее забрать, должны знать это.
Я не могу решить, возвращать ли здесь 404 Не найдено или 401 Запрещено.
Есть какие-нибудь подсказки? Что было бы лучшим и почему?
Согласно Википедии (и RFC 2616 ), код 401 используется, когда страница существует, но требует аутентификации; 403 - это страница, на которой аутентификация ничего не изменит. (В общем, 403 обычно означает, что разрешения на что-то неправильные, тогда как 401 запрашивает у пользователя имя пользователя / пароль). 404 - это когда документ просто не существует.
В вашем случае код 401 кажется наиболее подходящим, поскольку существует способ аутентификации пользователей, у которых ДЕЙСТВИТЕЛЬНО есть доступ к странице.
Определенно НЕ 404. 404 просто не найден.
401 - отказано в доступе.
403 запрещено.
Я бы выбрал 401
Если в запросе указаны учетные данные для авторизации, а запрашивающая сторона не имеет разрешений на доступ к этому ресурсу, следует вернуть 403.
Если в запросе не предоставлены учетные данные для авторизации, следует вернуть 401.