У меня есть конкретный пример того, как оставаться верным принципам RESTful, а именно:
Без сохранения состояния: Один клиент может отправить несколько запросов на сервер; однако каждый из них должен быть независимым, то есть каждый запрос должен
содержать всю необходимую информацию, чтобы сервер мог
понять это и обработать его соответственно. В этом случае сервер
не должен содержать никакой информации о состоянии клиента. Любая информация
статус должен оставаться на клиенте - например, сеансы. (цитата из:
https://www.dineshonjava.com/what-is-rest-and-rest-architecture-and-rest-constraints/)
Теперь предположим, что пользователь может создать новое событие, разместив это:
{
"name": "string",
"radius": 50,
"status": 0,
"location": {
"lat": 0,
"lng": 0
},
"commonUserId": 0
}
Приложение настроено так, что пользователь может выполнить то же самое, разместив вместо этого:
{
"name": "testing",
"radius": 50,
"status": 0,
"location": {
"lat": 0,
"lng": 0
}
}
Обратите внимание, что commonUserId
отсутствует во втором примере. commonUserId
- это внешний ключ в БД, необходимый для создания новой записи.
Причина, по которой это не требуется для создания новой записи, заключается в том, что приложение использует маркер доступа, предоставленный клиентом, для получения идентификатора пользователя (идентифицированного идентификатора пользователя) с использованием некоторой логики. Затем приложение использует этот извлеченный идентификатор (из логики) для создания вставки / записи.
Теперь мой вопрос: это нарушает ограничение без сохранения состояния успокоительного API?
Я могу аргументировать оба способа:
Нет это не является нарушением, поскольку все данные были предоставлены клиентом технически. Хотя клиент зависит от некоторой логики приложения, чтобы это произошло.
Да это нарушение, потому что клиент зависит от логики приложения для получения идентификатора пользователя. Приложению пришлось искать идентификатор пользователя, а не клиент, отправляющий его.
Причина, по которой я спрашиваю это, заключается в том, что я могу сделать идентификатор частью информации, которую должен предоставить клиент, однако, поскольку требуется accessToken, приложение может использовать это для получения идентификатора ...
Может быть, я слишком много думаю об этом? Что такое лучшая практика? Это до разработчика это ситуация? Кто-нибудь еще сталкивался с этой проблемой? Как бы вы справились с этим и почему?
Примечание: я строю это с помощью LoopBack.
Редактировать:
Итак, я полагаю, здесь есть основной вопрос. Можно ли полагаться на токен доступа в качестве средства для получения другой информации?