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

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

• используем POST для создания ресурса о книге (передаем при этом XML, JSON или любой другой формат) с URI http://www.apress.com/book/. В ответ получаем с сервера URI нового ресурса: http://www.apress.com/book/123456;

• применим GET для считывания ресурса (а также для считывания тех ссылок на другие ресурсы, которые мы, возможно, встретим в теле объекта) по адресу http://www.apress.com/book/123456;

• используем PUT для обновления данных о ресурсе по адресу http://www.apress.com/book/123456;

• применим DELETE для удаления ресурса по адресу http://www.apress.com/book/123456.

Пользуясь HTTP-операциями, мы можем совершать над ресурсом любые действия из разряда CRUD.

WADL

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


Листинг 15.2. Код на языке WADL, определяющий операции, которые можно выполнить с ресурсом

>

>··


>··


>····

>······

>······

>········

>··········

>··········

>········

>······

>······

>····


>····

>······

>········

>··········

>··········

>········

>······

>····


>··

>

В листинге 15.2 описан корень ресурса (http://www.apress.com/), которому вы можете передать идентификатор ({id}) для получения (GET) или удаления (DELETE) книги. Другой ресурс позволяет получить (GET) все записи о книгах с сайта APress в формате JSON или XML.

Обзор спецификаций веб-служб с передачей состояния представления

В отличие от стеков SOAP и WS-*, опирающихся на стандарты W3C, REST не имеет стандарта и является просто стилем архитектуры, в котором есть свои принципы проектирования. Приложения в стиле REST значительно зависят от других стандартов:

• HTTP;

• URI, URL;

• XML, JSON, HTML, GIF, JPEG и т. д. (представления ресурсов).

Технологии со стороны Java были описаны в спецификации JAX-RS (API Java для веб-служб с передачей состояния представления), но REST напоминает шаблон проектирования: многоразовое решение для распространенной проблемы, которое может быть реализовано на нескольких языках.

Краткая история REST

Термин REST впервые появился в диссертации Роя Томаса Филдинга «Архитектурные стили и проектирование архитектур программных систем, поддерживающих работу в сети», в главе 5 (работа доступна в Интернете на сайте Калифорнийского университета: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm). Диссертация представляет собой ретроспективное описание архитектуры, на базе которой была создана Всемирная паутина. В этой работе Филдинг рассматривает те части Сети, которые функционируют особенно хорошо, и вычленяет принципы проектирования, которые позволили бы создать другую распределенную гипермедийную систему. Предполагается, что она должна быть не менее эффективной, чем Интернет, но может быть и не связана с ним.

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

API Java для веб-служб с передачей состояния представления

Для написания веб-служб REST на языке Java вам понадобятся лишь клиент и сервер, поддерживающий взаимодействие по протоколу HTTP. Любой браузер и контейнер HTTP-сервлетов решит такую задачу — вам придется лишь озаботиться определенной конфигурацией XML и состряпать связующий код для синтаксического анализа запросов и ответов HTTP. Но когда такой код окажется написан, его будет практически невозможно читать и поддерживать. Вот тут-то нам и пригодится JAX-RS. Как видите, написав несколько аннотаций, вы получаете широчайшие возможности для вызова HTTP-ресурсов и их синтаксического анализа.

Первая версия спецификации JAX-RS (запрос на спецификацию JSR 311) была готова в октябре 2008 года. В ней был определен набор API, на основе которых строится архитектурный стиль REST. Но в данном варианте спецификации была описана лишь серверная часть REST. С появлением платформы Java EE 7 спецификация JAX-RS была обновлена до версии 2.0. Среди других ее нововведений можно назвать описание клиентского API.


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.