Изучаем Java EE 7 - [235]
Единообразный интерфейс
Одно из важнейших ограничений, оформляющих архитектуру RESTful, — использование единообразного интерфейса для управления всеми вашими ресурсами. Выберите подходящий вам интерфейс, но применяйте его одинаково во всех контекстах, от ресурса к ресурсу, от службы к службе. Никогда не отступайте от выбранного принципа, не изменяйте исходного значения. При использовании единообразного интерфейса «общая архитектура системы упрощается, а также повышается прозрачность взаимодействий» (Рой Томас Филдинг, «Архитектурные стили и проектирование архитектур программных систем, поддерживающих работу в сети» (Architectural Styles and the Design of Network-based Software Architectures)). Ваши службы становятся частью сообщества служб, использующих совершенно одинаковую семантику.
Основным веб-протоколом де-факто является HTTP. Это основанный на работе с документами стандартизированный протокол, действующий по принципу «запрос — ответ», обеспечивающий взаимодействие клиента и сервера. HTTP — это единообразный интерфейс веб-служб с передачей состояния представления. Веб-службы, построенные на базе SOAP, WSDL и других стандартов WS-*, также используют HTTP в качестве «транспортного уровня», но задействуют лишь немногие из его возможностей (ведь SOAP-службы могут работать и с другими транспортными протоколами, например с JMS). При использовании этих альтернатив приходится выяснять семантику службы, анализируя WSDL, а потом вызывать нужные методы. Веб-службы с передачей состояния представления имеют единообразный интерфейс (HTTP-методы и URI), поэтому если вы знаете, где находится ресурс (URI), то можете вызвать HTTP-метод (GET, POST и т. д.).
Единообразный интерфейс не только способствует узнаваемости, но и улучшает интероперабельность между приложениями. Протокол HTTP широко поддерживается, а связанных с ним клиентских библиотек так много, что вам вряд ли придется сталкиваться с проблемами при обмене информацией.
Отсутствие сохранения состояния
Последняя из важнейших черт REST — отсутствие сохранения состояния. Она означает, что каждый HTTP-запрос происходит в полной изоляции от других, так как серверу никогда не приходится отслеживать запросы, выполненные ранее. Эту мысль можно сформулировать и яснее: состояние ресурса и состояние приложения обычно различаются. Состояние ресурса должно находиться на сервере и совместно использоваться всеми, а состояние приложения — оставаться на клиенте и принадлежать только ему. Возвращаясь к примеру из листинга 15.1, отмечу: состояние приложения заключается в том, что клиент выбрал представление альбома «Элла и Луи», но сервер не должен об этом знать. Состояние ресурса — это сама информация об альбоме, и сервер, конечно, должен обеспечивать ее поддержку. Клиент может изменить состояние приложения. Если корзина для заказов — это ресурс с ограниченным доступом (то есть доступный всего одному клиенту), то приложение должно отслеживать идентификатор корзины заказов в рамках клиентского сеанса.
Отсутствие сохранения состояния связано с многочисленными преимуществами. В частности, эта черта улучшает масштабируемость: не приходится обрабатывать информацию о сеансах, маршрутизировать последующие запросы на тот же сервер, что и предыдущие (балансирование нагрузки), обрабатывать отказы (например, связанные с перебоями в работе) и т. д. Если вам требуется сохранять состояние, то клиенту приходится выполнять дополнительную работу, связанную с этим.
HTTP
HTTP — это протокол для распределенных совместно работающих гипермедийных информационных систем. Именно он породил Всемирную паутину с ее URI-адресами, язык HTML, а также программы-браузеры. HTTP стал плодом скоординированной работы организаций W3C и IETF. Протокол был разработан на основе нескольких «рабочих предложений» (RFC), среди которых следует особо отметить RFC 216, где определяется версия этого протокола HTTP 1.1.
Протокол HTTP основан на запросах и ответах, которыми обмениваются клиент и сервер. Клиент отправляет на сервер запрос и ожидает получить от него ответ (рис. 15.1). Сообщения, которыми они обмениваются, состоят из конверта и тела. Тело также называется полезной информацией или сущностью.
Рис. 15.1. Запрос и ответ в протоколе HTTP
Если вы переходите по страницам сайта Apress, то видите в браузере только веб-страницы, но не технические детали запросов и ответов HTTP. Чтобы понять, что же происходит «за кулисами», вы можете воспользоваться другим инструментом, например cURL. Вот информация о запросе, отправленном на сервер при переходе по ссылке http://www.apress.com/java?limit=all&mode=list:
>$ curl — v — X GET http://www.apress.com/java?limit=all&mode=list
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.