Подтвердить что ты не робот

Что на самом деле означает принцип безгражданства REST?

Прочитав вступительные статьи по REST (Филдинг-тезис и другие), мое восприятие безгражданства заключается в том, что на стороне сервера не должно быть объектов сеанса. Тем не менее, я вижу Flask (и, возможно, другие структуры REST в разных технологиях, о которых я не знаю) дает нам объект сеанса для хранения информации на сервере в этом пример:

@app.route('/login', methods=['GET', 'POST'])
def login():
  if request.method == 'POST':
    session['username'] = request.form['username']
    return redirect(url_for('index'))
...

Конечно, я недопонимаю безгражданство REST. Итак, что это на самом деле?

4b9b3361

Ответ 1

Цели введения ограничения безгражданства в REST включают улучшения видимости, надежности и масштабируемости. Это означает, что прокси-серверы и другие посредники лучше могут участвовать в моделях связи, которые связаны с самоописательными сообщениями без гражданства, смерть сервера и переход на другой ресурс не приводят к проблемам синхронизации состояния сеанса, и легко добавлять новые серверы для повторной обработки нагрузки клиента без необходимо синхронизировать состояние сеанса.

REST достигает безгражданства с помощью ряда механизмов:

  • При разработке методов и шаблонов связи они не требуют сохранения состояния на стороне сервера после запроса.
  • Конструируя службы, которые предоставляют возможности для непосредственного отбора и перехода на серверное состояние без состояния оставленного приложения
  • "Отложить" или передать состояние клиенту в виде сообщения в конце каждого запроса, когда требуется состояние сеанса или состояние приложения.

В этой последней точке раскрывается обратная сторона безгражданства: приложения, требующие какого-либо состояния сеанса, остаются за пределами одного запроса, должны иметь это состояние, отправленное обратно клиенту в качестве части сообщения ответа. В следующий раз, когда клиент хочет выполнить запрос, состояние снова будет передано службе, а затем обратно клиенту.

вы можете получить дополнительную информацию отсюда http://soundadvice.id.au/blog/2009/06/

Ответ 2

Нет, вы хорошо понимаете. В службе RESTful не должно быть никаких "сеансов". Всегда проверяйте, что вы можете отправлять любой URI по почте, хранить его в закладках и ссылаться на него в ссылках. Именно поэтому REST настолько важен для Интернета: нет ресурсов RESTful = больше ссылок. Аутентификация должна выполняться только при доступе к представлению ресурса.

То, что вы можете использовать вместо сеансов, представляет собой объект пользователя (например, корзину покупок), который может быть изменен методами REST. Это отличается от сеанса, поскольку, например, могут быть службы, в которых вы можете разрешить другим пользователям просматривать вашу корзину.

Ответ 3

В архитектуре REST состояние сеанса полностью сохраняется на клиенте. Это означает, что данные не могут быть оставлены на сервере в общем контексте, и нам по-прежнему приходится отправлять повторяющиеся данные (служебные данные для взаимодействия) в серии запросов. Поскольку мы сохраняем состояние приложения на стороне клиента, это уменьшает контроль сервера над последовательным поведением приложения, поскольку приложение становится зависимым от правильной реализации семантики в нескольких клиентских версиях. Однако это ограничение вызывает свойства видимости, надежности и масштабируемости.

  • Видимость улучшена, потому что система мониторинга не должна за исключением одного запроса, чтобы определить полный характер запроса.
  • Надежность улучшается, поскольку она облегчает задачу восстановления частичные отказы.
  • Масштабируемость улучшается, поскольку не требуется сохранять состояние между запросов позволяет серверному компоненту быстро освобождать ресурсы и упрощает реализацию, поскольку серверу не требуется управлять использованием ресурсов по запросам.

см. http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm