Изучаем Java EE 7 - [248]
Класс/интерфейс | Описание |
---|---|
Client | Это основная входная точка для текучего API, используемого для построения и выполнения клиентских ответов |
ClientBuilder | Входная точка для клиентского API, используемая для начальной загрузки экземпляров Client |
Configurable | Клиентская конфигурационная форма Client, WebTarget и Invocation |
Entity | Инкапсулирует объект сообщения, включая ассоциированную информацию о вариантах |
Invocation | Запрос, готовый к исполнению |
Invocation.Builder | Построитель вызовов клиентского интерфейса |
WebTarget | Цель ресурса, идентифицируемая URI ресурса |
Пошагово рассмотрим этот список, чтобы разобраться, как работать с новым API. Затем объединим все приобретенные знания и протестируем веб-службу в стиле REST.
Основной входной точкой в данный API является интерфейс Client. Он конфигурирует HTTP-соединения и управляет ими. Кроме того, это фабрика для WebTargets, поэтому данный интерфейс обладает набором методов для создания ссылок на ресурсы и вызова ресурсов. Экземпляры Client создаются с помощью одного из статических методов класса ClientBuilder:
>Client client = ClientBuilder.newClient();
В примере показан способ создания экземпляра Client с помощью стандартной реализации. Мы также можем запросить конкретную специальную реализацию Client, воспользовавшись нужной конфигурацией. Например, следующий код регистрирует поставщика CustomCustomerReader (см. листинг 15.17) и устанавливает некоторые свойства:
>Client client = ClientBuilder.newClient();
>client.configuration(). register(CustomCustomerReader.class). setProperty("MyProperty", 1234);
Имея Client, вы можете выбрать в качестве цели URI определенной веб-службы в стиле REST и вызывать в ней конкретные HTTP-методы. Именно для таких операций нужны интерфейсы WebTarget и Invocation. Методы Client.target() — это фабрики для веб-целей, представляющие конкретный URI. Вы выстраиваете и выполняете запросы из экземпляра WebTarget. Можно создать WebTarget со строковым представлением URI:
>WebTarget target = client.target("http://www.myserver.com/book");
Можно также получить WebTarget от java.net.URI, javax.ws.rs.core.UriBuilder или javax.ws.rs.core.Link:
>URI uri = new URI("http://www.myserver.com/book");
>WebTarget target = client.target(uri);
Теперь у вас есть URI, на который нужно нацелиться. Переходим к построению HTTP-запроса. WebTarget обеспечивает такие операции с помощью Invocation.Builder. Чтобы инициировать простой HTTP-запрос GET к URI, достаточно написать:
>Invocation invocation = target.request(). buildGet()
Invocation.Builder позволяет строить запросы GET, а также POST, PUT и DELETE. Кроме того, можно строить запрос для различных MIME-типов и даже добавлять параметры с информацией о пути, запросе и матрице. Для методов PUT и POST необходимо передавать параметр Entity, представляющий полезную нагрузку для отправки веб-службе в стиле REST:
>target.request(). buildDelete();
>target.queryParam("author", "Eloise"). request(). buildGet();
>target.path(bookId). request(). buildGet();
>target.request(MediaType.APPLICATION_XML). buildGet();
>target.request(MediaType.APPLICATION_XML). acceptLanguage("pt"). buildGet();
>target.request(). buildPost(Entity.entity(new Book()));
Этот код просто строит Invocation. Затем понадобится вызвать метод invoke() для активизации вашей удаленной веб-службы в стиле REST и получить обратно объект Response, который определяет соглашение (контракт) с возвращаемым экземпляром. Именно Response вы и применяете:
>Response response = invocation.invoke();
Итак, если собрать все вместе, то следующие строки кода понадобятся для вызова метода GET в удаленной REST-службе, расположенной по ссылке http://www.myserver.com/book. При этом возвращается значение text/plain:
>Client client = ClientBuilder.newClient();
>WebTarget target = client.target("http://www.myserver.com/book");
>Invocation invocation = target.request(MediaType.TEXT_PLAIN). buildGet();
>Response response = invocation.invoke();
Благодаря API построителя и некоторым полезным сокращениям аналогичное поведение можно выразить всего в одной строке кода:
>Response response =
>····ClientBuilder.newClient(). target("http://www.myserver.com/book")
>····.request(MediaType.TEXT_PLAIN). get();
Далее рассмотрим, как манипулировать Response и использовать объекты.
Класс Response позволяет потребителю в определенной степени управлять HTTP-ответами, возвращаемыми от веб-службы в стиле REST. С помощью этого API можно проверять код состояния HTTP, заголовки, cookie и, конечно же, тело сообщения (то есть объект, или сущность). В коде, приведенном ниже, используются встроенные методы для обращения к определенной низкоуровневой информации о HTTP — в частности, они позволяют узнать код состояния, длину тела сообщения, дату отправки или любой HTTP-заголовок:
>assertTrue(response.getStatusInfo() == Response.Status.OK);
>assertTrue(response.getLength() == 4);
>assertTrue(response.getDate()!= null);
>assertTrue(response.getHeaderString("Content-type"). equals("text/plain"));
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.