Изучаем Java EE 7 - [234]

Шрифт
Интервал

.

Как выбрать одно из возможных представлений заданного ресурса? Есть два решения. Сервис может давать отдельный URI на каждое представление, как показано выше. Но две эти ссылки действительно очень разные и почти не напоминают друг друга. Ниже приведен более красивый набор ссылок:

• http://www.apress.com/java;

• http://www.apress.com/java/csv;

• http://www.apress.com/java/xml.

Первый URI по умолчанию используется для представления ресурса, а в дополнительных вариантах URI приведен формат соответствующего представления /csv (следует понимать: text/csv), /xml, /pdf и т. д.

Другое решение — предложить один URI для всех вариантов представления (например, http://www.apress.com/java) и задействовать механизм, называемый согласованием содержимого. Мы подробно поговорим о нем ниже в этой главе. Например, URI может существовать в виде человекочитаемого и машинно-обрабатываемого представлений.

Адресуемость

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

Допустим, вы пытаетесь справиться с ошибкой в вашем приложении. Вы провели кое-какие тесты и в результате пришли к строке 42 в коде класса CreditCardValidator.java — именно здесь и возникает ошибка. Поскольку вы не отвечаете за данную область приложения, то хотите переадресовать эту проблему квалифицированному коллеге, который сможет с ней справиться. Как вы укажете ему эту зловредную строку? Можно сказать: «посмотри строку 42 в классе CreditCardValidator», но если ваш исходный код адресуется через браузер репозитория, то вы можете сохранить URI этой строки и указать ее в отчете об ошибке. Здесь мы подходим к проблеме определения детализации ваших REST-ресурсов в приложении: адресуемость прослеживается на уровне строки, метода, класса, уровня и т. д.

Уникальные URI обеспечивают связываемость ваших ресурсов, а поскольку они предоставляются через единообразный интерфейс, все точно знают, как с ними взаимодействовать. Соответственно, пользователи вполне могут работать с вашим приложением таким образом, о котором вы даже не задумывались.

Связность

В теории графов граф называется связным, если между любой парой его вершин существует как минимум один путь. Граф называется сильно связным, если он содержит прямой путь от вершины u к v и от вершины v к u для любой пары вершин u, v. Согласно принципам REST ресурсы должны быть связаны максимально сильно.

Опять же это утверждение появилось в результате причин успеха Интернета. На всех веб-страницах есть ссылки для перехода на другие страницы, они расположены логичным и интуитивно понятным образом, и весь Интернет является очень хорошо связанным. Если между двумя ресурсами существует четкая взаимосвязь, то они должны быть соединены. REST постулирует, что веб-службы также должны пользоваться преимуществами гипермедийности, информируя клиента о том, какие ресурсы доступны и куда двигаться дальше. REST стимулирует легкую обнаруживаемость служб. Располагая единственным URI, пользовательский агент, который обращается к хорошо связанной веб-службе, может обнаружить все доступные действия, ресурсы, их различные представления и т. д.

Например, когда пользовательский агент (браузер) ищет представление CD (листинг 15.1), в этом представлении может содержаться не только имя исполнителя, но и ссылка на его биографию (в виде URI). Пользовательский агент определяет, переходить по этой ссылке или нет. Представление также может содержать и ссылки на другие представления ресурса или доступных действий.


Листинг 15.1. Представление CD, связанное с другими службами

>

>··Элла и Луи

>··1956

>··Элла Фицжеральд

>··Луи Армстронг

>··

>··

>··

>········href="http://music.com/album/789/comments"/>

>··

Еще одна важнейшая особенность гипермедийности — это состояние приложения, которое определяется в контексте гипермедиа. Проще говоря, сам тот факт, что веб-служба предоставляет набор ссылок, позволяет клиенту переводить приложение из одного состояния в другое. И для этого достаточно просто перейти по ссылке.

В предыдущем фрагменте XML-кода клиент может изменить состояние приложения, оставив комментарий об альбоме. Список комментариев к альбому — это ресурс, адресуемый по URI http://music.com/album/789/comments


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.