Автор оригинала: Pankaj Kumar.
Добро пожаловать в учебник по веб-службам Restful на Java. REST – это аббревиатура для Передачи репрезентативного состояния . REST-это архитектурный стиль для разработки приложений, к которым можно получить доступ по сети. Архитектурный стиль REST был освещен Роем Филдингом в его докторской диссертации в 2000 году.
Веб-службы Restful
Веб-службы Restful-это архитектура клиент-сервер без состояния , в которой веб-службы являются ресурсами и могут быть идентифицированы по их URI.
Клиентские приложения REST могут использовать методы HTTP GET/POST для вызова веб-служб Restful. REST не указывает какой-либо конкретный протокол для использования, но почти во всех случаях он используется по протоколу HTTP/HTTPS. По сравнению с веб-службами SOAP они являются легкими и не соответствуют никаким стандартам. Мы можем использовать XML, JSON, текст или любой другой тип данных для запроса и ответа.
API веб-служб Java RESTful
Java API для веб-служб RESTful (JAX-RS) – это Java API для создания веб-служб REST. JAX-RS использует аннотации для упрощения разработки и развертывания веб-служб. JAX-RS является частью JDK, поэтому вам не нужно ничего включать, чтобы использовать его аннотации.
Аннотации веб-служб Restful
Некоторые из важных аннотаций JAX-RS являются:
@Путь
: используется для указания относительного пути к классу и методам. Мы можем получить URI веб-службы, сканируя значение аннотации пути.@GET
,@PUT
,@POST
,@DELETE
и@HEAD
: используется для указания типа HTTP – запроса для метода.@@Производители
,@Потребители
: используется для указания типов запросов и ответов.@PathParam
: используется для привязки параметра метода к значению пути путем его синтаксического анализа.
Веб-сервисы Restful и МЫЛО
- SOAP-это протокол, в то время как REST-это архитектурный стиль.
- Сервер SOAP и клиентские приложения тесно связаны и связаны контрактом WSDL, в то время как в веб-службах REST и клиенте контракта нет.
- Кривая обучения проста для отдыха по сравнению с веб-сервисами SOAP.
- Типы запросов и ответов веб-служб REST могут быть XML, JSON, текстовыми и т.д. в то время как SOAP работает только с XML.
- JAX-RS-это Java API для веб-служб REST, в то время как JAX-WS-это Java API для веб-служб SOAP.
Реализации API REST
Существует две основные реализации API JAX-RS.
- Джерси : Джерси является эталонной реализацией, предоставленной Sun. Для использования Джерси в качестве реализации JAX-RS все, что нам нужно, это настроить его сервлет в web.xml и добавьте необходимые зависимости. Обратите внимание, что API JAX-RS является частью JDK, а не Джерси, поэтому мы должны добавить его банки зависимостей в наше приложение.
- RESTEasy : RESTEasy -это проект JBoss, который обеспечивает реализацию JAX-RS.
Учебник по веб-службам Java Restful
Давайте посмотрим, как легко создать веб-сервис Restful с помощью Jersey, а затем РАССЛАБЬТЕСЬ. Мы будем использовать следующие методы по HTTP и использовать расширение Chrome Postman для их тестирования.
//человек/{идентификатор}/получить манекен | Возвращает фиктивный объект person | ПОЛУЧИТЬ |
/человек/добавить | Добавляет человека | ПОСТ |
/человек/{идентификатор}/удалить | Удалите человека с “идентификатором” в URL-адресе | ПОЛУЧИТЬ |
//человек/получить все | Соберите всех людей | ПОЛУЧИТЬ |
/человек/{идентификатор}/получить | Найдите человека с “идентификатором” в URL-адресе | ПОЛУЧИТЬ |
Веб-сервисы Jersey Restful
Создайте динамический веб-проект, а затем преобразуйте его в Maven, чтобы получить скелет вашего проекта веб-служб. На рисунке ниже показана структура проекта окончательного проекта.
Давайте посмотрим на зависимости Джерси, которые у нас есть в pom.xml файл.
4.0.0 JAXRS-Example JAXRS-Example 0.0.1-SNAPSHOT war com.sun.jersey jersey-server 1.19 com.sun.jersey jersey-servlet 1.19 com.sun.jersey jersey-client 1.19 src maven-war-plugin 2.6 WebContent false maven-compiler-plugin 3.3 1.7 1.7
Нам не требуется добавлять jersey-клиент зависимости, но если вы пишете программу java для вызова веб-службы REST с использованием Jersey, то это необходимо.
Теперь давайте рассмотрим дескриптор развертывания, чтобы узнать, как настроить Jersey для создания нашего веб-приложения.
JAXRS-Example Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.journaldev 1 Jersey REST Service /*
Это все, что требуется для подключения Jersey в наше веб-приложение, в нашем java-коде мы будем использовать аннотации JAX-RS. Обратите внимание на значение параметра инициализации com.sun.jersey.config.property.packages
, чтобы предоставить пакет, который будет проверен на наличие ресурсов и методов веб-службы.
ОСТАЛЬНЫЕ Примеры Классов Моделей
Прежде всего, мы создадим два компонента модели – Person
для данных нашего приложения и Response
для отправки ответа в клиентские системы. Поскольку мы будем отправлять XML-ответ, компоненты должны быть аннотированы @XmlRootElement
, следовательно, у нас есть этот класс.
package com.journaldev.jaxrs.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement (name="person") public class Person { private String name; private int age; private int id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString(){ return id+"::"+name+"::"+age; } }
package com.journaldev.jaxrs.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Response { private boolean status; private String message; public boolean isStatus() { return status; } public void setStatus(boolean status) { this.status = status; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
Обучающие службы веб-служб REST
Основываясь на нашей структуре URL-адресов, ниже приведен интерфейс сервиса и его код реализации.
package com.journaldev.jaxrs.service; import com.journaldev.jaxrs.model.Person; import com.journaldev.jaxrs.model.Response; public interface PersonService { public Response addPerson(Person p); public Response deletePerson(int id); public Person getPerson(int id); public Person[] getAllPersons(); }
package com.journaldev.jaxrs.service; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.journaldev.jaxrs.model.Person; import com.journaldev.jaxrs.model.Response; @Path("/person") @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public class PersonServiceImpl implements PersonService { private static Mappersons = new HashMap (); @Override @POST @Path("/add") public Response addPerson(Person p) { Response response = new Response(); if(persons.get(p.getId()) != null){ response.setStatus(false); response.setMessage("Person Already Exists"); return response; } persons.put(p.getId(), p); response.setStatus(true); response.setMessage("Person created successfully"); return response; } @Override @GET @Path("/{id}/delete") public Response deletePerson(@PathParam("id") int id) { Response response = new Response(); if(persons.get(id) == null){ response.setStatus(false); response.setMessage("Person Doesn't Exists"); return response; } persons.remove(id); response.setStatus(true); response.setMessage("Person deleted successfully"); return response; } @Override @GET @Path("/{id}/get") public Person getPerson(@PathParam("id") int id) { return persons.get(id); } @GET @Path("/{id}/getDummy") public Person getDummyPerson(@PathParam("id") int id) { Person p = new Person(); p.setAge(99); p.setName("Dummy"); p.setId(id); return p; } @Override @GET @Path("/getAll") public Person[] getAllPersons() { Set ids = persons.keySet(); Person[] p = new Person[ids.size()]; int i=0; for(Integer id : ids){ p[i] = persons.get(id); i++; } return p; } }
Большая часть кода не требует пояснений, потратьте некоторое время на ознакомление с аннотациями JAX-RS @Path
, @PathParam
, @POST
, @GET
, @Потребляет
и @Производит
.
Тест веб-служб Restful
Вот и все. Наш веб-сервис готов, просто экспортируйте его в виде файла WAR и поместите в каталог Tomcat webapps или разверните в любом другом контейнере по вашему выбору.
Ниже приведены некоторые из тестов, выполненных с использованием расширения Postman chrome для этого веб-сервиса. Обратите внимание, что мы должны указать значения типа “Принять” и “Содержимое” как “приложение/xml” в заголовке запроса, как показано на рисунке ниже.
- получить Манекен
- добавлять
- получить
- Получить все
- удалить
Это все для создания веб-сервисов с использованием реализации Jersey JAX-RS. Как вы можете видеть, большая часть кода использует аннотации JAX-RS, а Jersey подключается через дескриптор развертывания и зависимости.
Пример веб-служб RESTEasy RESTful
Мы будем использовать всю бизнес-логику, разработанную в проекте Джерси, но вместо того, чтобы вносить изменения в один и тот же проект, я создал новый проект. Создайте динамический веб-проект и преобразуйте его в проект Maven. Затем скопируйте все классы java – Person, Response, PersonService и PersonServiceImpl. Ниже приведен окончательный проект после того, как мы закончим со всеми изменениями.
Добавьте ниже зависимости RESTEasy в pom.xml файл.
org.jboss.resteasy resteasy-jaxrs 3.0.13.Final org.jboss.resteasy resteasy-jaxb-provider 3.0.13.Final
Ниже приведен web.xml файл, в котором мы настраиваем сервлет Resteasy.
JAXRS-Example-RestEasy org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap resteasy-servlet org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher javax.ws.rs.Application com.journaldev.jaxrs.resteasy.app.MyApp resteasy-servlet /*
Обратите внимание на параметр инициализации, в котором указывается MyApp
класс в качестве значения, здесь мы расширяем javax.ws.rs.core.Приложение
класс, как показано ниже.
package com.journaldev.jaxrs.resteasy.app; import java.util.HashSet; import java.util.Set; import javax.ws.rs.core.Application; import com.journaldev.jaxrs.service.PersonServiceImpl; public class MyApp extends Application { private Set
Тест веб-служб RESTEasy
Вот и все. Наш веб-сервис готов к реализации RESTEasy JAX-RS. Ниже приведены некоторые результаты теста расширения Postman chrome.
- получить Манекен
- добавлять
- получить
Это все для Учебника по веб-службам Restful , Я надеюсь, что вы узнали об аннотациях JAX-RS и поняли преимущества наличия стандартного API, который помог нам повторно использовать код и так легко перейти с Джерси на RESTEasy.