Важное примечание
В центре внимания этого вопроса находятся конечные точки API, которые различают, какие ресурсы возвращаются, в зависимости от того, кто аутентифицируется, например. Алиса получает ресурсы A и B, а Боб получает ресурсы X и Y.
Это НЕ о различии представления возвращаемых ресурсов.
Все конечные точки возвращают представления JSON ресурсов.
Введение
Пожалуйста, рассмотрите следующие три потенциальных дизайна конечных точек API, все возвращающие ресурсы thing
пользователя.
Конечная точка A
GET /things
Если учетные данные аутентификации для <user_x>
предоставляются с запросом, он возвращает ресурсы thing
, которые конкретно относятся к <user_x>
.
Например, аутентификация пользователя Alice возвращает ресурс A и B, а аутентификация пользователя Bob получает ресурсы X и Y.
Таким образом, дифференциация ответа для разных пользователей, прошедших проверку подлинности, заключается в том, какие экземпляры ресурса возвращаются и NOT, какая информация этих экземпляров возвращается (т.е. представление ресурса).
При неудачной аутентификации возвращается ответ 401.
Конечная точка B
GET /user/<user_x>/things
Конечная точка C
GET /things/?user_id=<user_x>
Оба конечных пункта B и C предоставляют экземпляры ресурса thing
, связанные с <user_x>
, если пользователь, прошедший проверку подлинности, имеет право доступа к этим ресурсам thing
.
Представлено представление экземпляров ресурса thing
, например. какая информация о ресурсах возвращается, может варьироваться в зависимости от того, какой пользователь аутентифицируется. Например, <user_x>
или пользователь admin может получить более богатые данные на экземпляр ресурса, а затем пользователь с ограниченными правами доступа.
Аутентификация пользователей, которые не имеют прав доступа к ресурсам thing
<user_x>
, получит ответ 401.
Мои вопросы
Я хотел бы получить ответы на следующие вопросы:
1) Является ли конечная точка RESTful?
2) Имеет ли конечная точка A хороший дизайн URI?
3) Являются ли конечные точки B и C RESTful?
4) Имеют ли конечные точки B и C хороший дизайн URI?
Я с нетерпением жду ваших ответов. Я также предоставил мои собственные ответы ниже и был бы благодарен за отзывы об этом.
Спасибо!
- Фредди Снайдер