12 мая 2010 г.

HATEOAS: Ресурс как состояние приложения

Автор: SUBBU ALLAMARAJU
 Объяснить смысл "состояния" в "Hypermedia as the Engine of Application State" (ресурс как состояние приложения) (HATEOAS) достаточно сложно. Особенно, если Вы должны сделать это за пару минут.

 Проблема в том, что со словом "состояние" у разных людей ассоциируются разные вещи. Для большинства людей, связанных с разработкой веб-приложений, "состоянием" являются числа, строки и другие объекты, сохраняемые в некотором месте, скажем, в свойствах текущей сессии. Почти каждая книга начального уровня о веб-разработке включает в себя пример корзины товаров, которая хранится в памяти, связанной с текущей сессией. Если мы используем эту концепцию для объяснения состояния в HATEOAS, то мы придем к выводу, что использовать ресурс как состояние приложения можно, написав сервер, который будет хранить аналогичные объекты в виде некоего XML или другого формата данных и возвращаемого в качестве ответа на каждый запрос к серверу. Такой образ мышления в итоге заведет нас в тупик.

 И вот почему. После того, как сервер добавит такой объект состояния в представление страницы, следующий запрос клиента к серверу должен содержать в себе этот объект. В этом случае речь идет об обмене этими объектами между клиентом и сервером туда-обратно, что позволяет далеко не каждый из методов HTTP. Далее мы придем к тому, что попытаемся втиснуть этот объект в какой-нибудь универсальный интерфейс, позволяющий разместить состояние в запросе, и в конечном счете перейдем к использованию метода POST. Я уже вижу передачу сообщений с помощью метода POST, как следующий шаг этой логической цепочки. В этот момент тот, кто попытался объяснить принцип HATEOAS таким способом, может извиниться и идти дальше по своим делам. Тот же, кому это объясняли, решит, что этот принцип не подходит для его приложения.

 Вот пример, который я считаю наиболее подходящим для объяснения "состояния" в HATEOAS:
  •  Есть три страницы. Первая страница содержит ссылку для перехода на вторую страницу. Вторая страница содержит ссылки для перехода на предыдущую и третью страницы. Третья страница содержит ссылки для перехода на вторую и первую страницы.
     Клиент начинает с первой страницы и переходит по ссылке на вторую страницу. Тот факт, что страница содержит ссылку на первую страницу и ссылку на третью страницу означает, что клиент находится в состоянии "просмотр второй страницы". Именно это и есть "ресурс как состояние приложения". Для этого совершенно не нужно использовать какие-либо объекты, хранящие состояние (например, <page>2</page>) и передавать их каждый раз серверу или получать их от сервера.

 Надо признаться, что это несколько упрощенный вариант объяснения. Дело в том, что состояние вообще не связано с данными, хранимыми в представлении. HATEOAS означает, что представление отражает текущее состояние приложения через набор ссылок на связанные ресурсы. Эти ссылки могут указывать в том числе и на сохраненные на сервере состояния.

Источник: www.subbu.org
Перевод: Роман Голубин

Комментариев нет:

Отправить комментарий