Статьи

JAX-RS Учебник с Джерси для веб-сервисов RESTful

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

Это как приложение, работающее в Азии, предоставляет данные для приложения, работающего в Европе, или наоборот. Как это возможно, что серверы Facebook, размещенные в США, могут предоставлять услуги Facebook в Азии? Как это возможно, что опция проверки с использованием учетной записи Google доступна на многих сайтах, расположенных в разных частях света?

Ответ на поставленные выше вопросы — веб-сервисы. Есть два типа веб-сервисов, как указано ниже.

  1. Веб-сервис REST
  2. SOAP веб-сервис

Давайте поговорим подробно о веб-сервисе REST.

1. Введение

1.1 ОТДЫХ

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

REST позволяет представлять ресурсы в разных форматах, таких как XML, JSON, Text и т. Д.

1.2 Операции HTTP

Поскольку REST поддерживает протокол HTTP, он позволяет выполнять следующие операции с ресурсами.

  • GET — запрос GET используется для доступа к ресурсу и обеспечивает представление ресурса в желаемом формате.
  • POST — запрос POST используется для обновления существующего ресурса. Он также используется для создания нового ресурса. Он поддерживает представление ресурсов в различных форматах.
  • PUT — запрос PUT используется для обновления ресурса путем полной замены существующего. Согласно определению, запрос PUT является идемпотентным.
  • DELETE — запрос DELETE используется для удаления ресурса.

В веб-сервисах REST также есть два разных вида веб-сервисов REST, как указано ниже.

  • RESTful веб-сервис
  • RESTless веб-сервис

Мы подробно обсудим веб-сервисы RESTful в рамках учебника.

1.3 Веб-сервисы RESTful и JAX-RS

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

Java разработала программную спецификацию для создания веб-сервиса в соответствии с архитектурой REST. Название для этой спецификации API — JAX-RS, что означает Java API для RESTful Web Services. JAX-RS был частью Java SE 5 и стал постоянным членом семейства Java от Java EE 6. Текущая версия JAX-RS — это версия 2.1, и она была выпущена в сентябре 2017 года.

2. Аннотации

Давайте обсудим различные аннотации и спецификации, которые поддерживаются JAX-RS.

  • @Path : — указывает относительный путь класса ресурса или метода.
  • @GET : — HTTP-запрос Get, который используется для получения ресурса.
  • @PUT : — HTTP-запрос PUT, который используется для создания ресурса.
  • @POST : — HTTP POST-запрос, который используется для создания или обновления ресурса.
  • @DELETE : — HTTP-запрос DELETE, который используется для удаления ресурса.
  • @HEAD : — это HTTP-запрос HEAD, который используется для получения статуса доступности метода.
  • @Produces : — сообщает тип HTTP-ответа, генерируемого веб-службой. Например, APPLICATION / XML, APPLICATION / JSON и т. Д.
  • @Consumes : — сообщает тип HTTP-запроса, который может обрабатывать веб-служба. Например, APPLICATION / XML может использоваться для отправки запроса в формате XML.
  • @PathParam : — связывает параметр, переданный методу, со значением в пути.
  • @QueryParam : — связывает параметр, передаваемый методу, с параметром запроса в пути.
  • @HeaderParam : — связывает параметр, передаваемый методу, с заголовком HTTP.
  • @DefaultValue : — он назначит значение по умолчанию для параметра, который передается методу.
  • @Context : — это контекст ресурса. Например, HTTPRequest в качестве контекста.

3. Джерси

3.1 Что такое Джерси

Jersey — это платформа с открытым исходным кодом, которая используется для создания веб-сервисов RESTful. Это больше, чем просто реализация JAX-RS. Джерси также предоставляет свои собственные API-интерфейсы, чтобы сделать создание веб-служб более простым и полезным. Он также предоставляет ряд SPI для расширения инфраструктуры на основе потребностей разработчика.

3.2 Компоненты Джерси

Джерси полон множества функций и компонентов. Но есть четыре основных компонента Джерси. Они заключаются в следующем.

  • Основной сервер: — Он используется для создания веб-сервисов RESTful. Компоненты состоят из jersey-core, jersey-server и jsr311-api.
  • Основной клиент: — Для взаимодействия с веб-сервисами нам нужен клиент для связи между веб-сервисами. Компоненты состоят из джерси-клиента.
  • Поддержка JAXB: — Джерси обеспечивает поддержку JAXB. Это облегчает преобразование XML в объект. Компонент, который выполняет эту поддержку, является jersey-server.
  • Поддержка JSON: — Джерси обеспечивает поддержку JAXB. Это облегчает преобразование JSON в объект. Компонент, который выполняет эту поддержку, является jersey-server.
  • Простая интеграция со средой Spring и Guice.

Вот некоторые из основных компонентов и особенностей Джерси. Теперь давайте обсудим, как установить Джерси.

3.3 Установка на Джерси

Есть два способа установки Джерси в вашей программе. Мы можем использовать Gradle или выполнить прямую установку с веб-сайта Джерси.

Давайте посмотрим на оба пути.

3.3.1 Gradle

В случае, если мы используем Gradle, мы должны добавить следующие строки в разделе зависимости проекта.

compile 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.26'

Обратите внимание, что название проекта изменилось, начиная с версии 2.26. Все более ранние версии имели имя только jersey-container-servlet .

3.3.2 Установка с сайта Джерси

Для установки Джерси с его веб-сайта мы можем загрузить пакет, доступный на веб-сайте, который содержит все зависимости, кроме сторонних.

Вы можете скачать пакет по этой ссылке .

После загрузки пакета извлеките zip-файл и вставьте все фляги в WEB-INF/lib вашей программы. Это все, что вы готовы использовать трикотаж сейчас.

4. Инструменты и технологии

Давайте посмотрим на технологии и инструменты, используемые для создания программы.

  • Eclipse Oxygen.2 Release (4.7.2)
  • Java — версия 9.0.4
  • Gradle — 4.6
  • JAX-RS 2.1
  • Джерси-2,26
  • Tomcat 9.0

5. Структура проекта

Структура нашего проекта будет выглядеть так, как показано на рисунке ниже.

Структура проекта для проекта JAX-RS

Приведенная выше структура проекта предназначена для реализации плана JAX-RS, где библиотеки будут загружаться с веб-сайта Джерси. Для проектов с build.gradle и pom.xml структура проекта будет немного отличаться.

6. Цель программы

В рамках программы мы попытаемся создать простой веб-сервис с использованием Джерси. Также мы попытаемся понять конфигурацию и настройку, которые необходимо выполнить для создания веб-службы.

6.1 банки

Ниже приведен список файлов JAR, которые будут частью папки WEB-INF/lib .

Банки как часть сборки для проекта JAX-RS

Есть два способа добавить банки как часть проекта. Оба способа упомянуты ниже.

  1. Добавление Jar с использованием файлов сборки: Jars можно добавить в проект, используя файл сборки, такой как build.gradle или pom.xml, указав в качестве зависимостей файлы jar и версию.
  2. Загрузка с веб-сайта Джерси: все упомянутые выше банки доступны в составе пакета Джерси, который можно загрузить и скопировать на веб-сайте WEB-INF / lib. Ссылка для скачивания банок.

5.2 Конфигурация для JAX-RS

Чтобы использовать JAX-RS, мы должны зарегистрировать Джерси в качестве сервлета-диспетчера для запросов REST. Мы должны изменить в web.xml следующие строки.

Web.xml для Джерси в качестве сервлета Dispatcher

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?xml version = "1.0" encoding = "UTF-8"?>
    id="WebApp_ID" version="2.5">
    <display-name>JAX-RS Application Demo</display-name>
    <servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.tutorial</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

Существуют разные теги как часть web.xml для разных целей. display-name используется только для отображения. Тег init-param используется для инициализации. Мы использовали параметр jersey.config.server.provider.packages этот параметр определяет, какой пакет Jersey будет искать для классов обслуживания. Определенный здесь пакет должен содержать классы обслуживания. url-patter этот тег используется для определения шаблона URL. По умолчанию, начало URL будет с именем проекта, за которым следует шаблон URL, определенный в этом теге.

6.3 Класс обслуживания

Класс обслуживания отвечает за обработку запроса. Как только запрос получен сервлетом-диспетчером (в нашем случае это Джерси), запрос передается в класс обслуживания на основе пути URL. Имя класса службы HelloWorld.java

Сервисный класс для проекта

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
package com.tutorial;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
 
@Path("/hi")
public class HelloWorld
{
  @GET
  @Path("/{name}")
  public Response getMessage(@PathParam("name") String name)
  {
    String outMsg = "Hello " + name + "!";
    return Response.status(200).entity(outMsg).build();
  }
     
}

В приведенном выше коде @Path определен для пути URL. Таким образом, URL будет содержать имя проекта, шаблон URL, определенный как часть @Path web.xml, и атрибут, поддерживаемый аннотацией @Path . Запрос будет перенаправлен в этот класс диспетчерским сервлетом. @GET определил тип метода HTTP. Если он содержит параметры @Path с этими {} скобками, то эти параметры называются @PathParam . В нашем случае name является параметром пути. Вы можете определить путь на уровне обслуживания, а также на уровне метода.

6.4 Запустите программу

Для запуска программы необходим веб-сервер для запуска веб-сервиса. Для нашей программы мы использовали Apache Tomcat.

Давайте создадим файл войны и развернем войну на сервере Tomcat. Также мы можем интегрировать сервер Tomcat с Eclipse. Как только сервер Tomcat интегрирован с Eclipse, и проектная война развернута на сервере, мы получим следующий экран.

Tomcat интегрирован с Eclipse вместе с проектом JAX-RS

Теперь давайте запустим сервер Tomcat.

После запуска сервера tomcat мы введем следующий URL в браузер.

HTTP: // локальный: 8080 / JaxRsTutorial / отдых / привет / Anand

Обратите внимание, что сначала URL-адрес содержит имя проекта, за которым следует URL-шаблон, упомянутый как часть файла web.xml, затем путь службы и в конце параметр пути, который является именем.

В браузере появится следующий экран.

Результат веб-сервиса в браузере

7. Скачать проект Eclipse

Это было руководство для JAX-RS с использованием Джерси.

Вы можете скачать полный исходный код этого примера здесь: JaxRsTutorial.zip