Рубрики
Без рубрики

Учебник по веб-службам Restful на Java

Веб-службы Restful java, веб-службы Java Restful, Учебник по веб-службам Restful, службы rest на java, клиент rest java, java rest api, Учебник по REST.

Автор оригинала: 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 и МЫЛО

  1. SOAP-это протокол, в то время как REST-это архитектурный стиль.
  2. Сервер SOAP и клиентские приложения тесно связаны и связаны контрактом WSDL, в то время как в веб-службах REST и клиенте контракта нет.
  3. Кривая обучения проста для отдыха по сравнению с веб-сервисами SOAP.
  4. Типы запросов и ответов веб-служб REST могут быть XML, JSON, текстовыми и т.д. в то время как SOAP работает только с XML.
  5. JAX-RS-это Java API для веб-служб REST, в то время как JAX-WS-это Java API для веб-служб SOAP.

Реализации API REST

Существует две основные реализации API JAX-RS.

  1. Джерси : Джерси является эталонной реализацией, предоставленной Sun. Для использования Джерси в качестве реализации JAX-RS все, что нам нужно, это настроить его сервлет в web.xml и добавьте необходимые зависимости. Обратите внимание, что API JAX-RS является частью JDK, а не Джерси, поэтому мы должны добавить его банки зависимостей в наше приложение.
  2. 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 Map persons = 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 singletons = new HashSet();

	public MyApp() {
		singletons.add(new PersonServiceImpl());
	}

	@Override
	public Set getSingletons() {
		return singletons;
	}

}

Тест веб-служб RESTEasy

Вот и все. Наш веб-сервис готов к реализации RESTEasy JAX-RS. Ниже приведены некоторые результаты теста расширения Postman chrome.

  • получить Манекен
  • добавлять
  • получить

Это все для Учебника по веб-службам Restful , Я надеюсь, что вы узнали об аннотациях JAX-RS и поняли преимущества наличия стандартного API, который помог нам повторно использовать код и так легко перейти с Джерси на RESTEasy.