Руководство по Java веб-сервисам

Добро пожаловать на учебник по Java Web Services. Здесь мы узнаем о веб-сервисах, полезных концепциях веб-сервисов, а также различных типах API, которые у нас есть в Java для создания веб-сервисов.

Что такое веб-сервис

Простыми словами, сервисы, к которым можно получить доступ через сеть, называются веб-сервисами. Так в чем же разница от веб-приложения? Они тоже представляют собой сервисы, к которым можно получить доступ через сеть. Есть несколько атрибутов, которые разъясняют эту разницу.

  • Веб-приложения предназначены для пользователей и должны быть доступны в браузере в удобочитаемом формате, в то время как веб-сервисы предназначены для приложений для доступа к данным в формате XML, JSON и т.д.
  • Веб-приложения всегда используют протокол HTTP/HTTPS, в то время как традиционные веб-сервисы используют протокол SOAP. В последнее время популярность набирает REST, который представляет собой стиль архитектуры и почти всегда работает на протоколе HTTP/HTTPS.
  • Веб-приложения не предназначены для повторного использования, в то время как это одно из преимуществ веб-сервисов. Одним веб-сервисом можно пользоваться различными видами приложений.
  • Веб-приложение может получать доступ к веб-сервисам для получения данных или выполнения задач, но веб-сервисы не могут получать доступ к веб-приложениям для извлечения данных.
  • Веб-приложения способны поддерживать сеанс пользователя, веб-сервисы – безсостоятельны.

I hope above differences are good enough to clear any confusion with web applications and web services. Both are different concepts and meant for different purpose.

Типы веб-сервисов

Существует два типа веб-сервисов.

  1. SOAP: SOAP означает Simple Object Access Protocol. SOAP – это стандартный протокол, основанный на XML, для проектирования и разработки веб-сервисов. Поскольку он основан на XML, он независим от платформы и языка. Таким образом, наш сервер может быть основан на JAVA, а клиент – на .NET, PHP и т. д., и наоборот.
  2. REST: REST – это архитектурный стиль разработки веб-сервисов. Он набирает популярность в последнее время, потому что у него небольшой порог входа по сравнению с SOAP. Ресурсы являются основными концепциями RESTful веб-сервисов, и они уникально идентифицируются своими URI.

Веб-сервисы на Java

Java предоставляет собственное API для создания как SOAP, так и REST веб-сервисов.

  1. JAX-WS: JAX-WS означает Java API for XML Web Services. JAX-WS – это основанный на XML Java API для создания сервера веб-сервисов и клиентского приложения.
  2. JAX-RS: Java API for RESTful Web Services (JAX-RS) – это Java API для создания REST веб-сервисов. JAX-RS использует аннотации для упрощения разработки и развертывания веб-сервисов.

Оба этих API являются частью стандартной установки JDK, поэтому нам не нужно добавлять какие-либо файлы JAR для работы с ними. Оба этих API очень сильно используют аннотации.

Пример приложения Hello World JAX-WS

Давайте создадим очень простое приложение Hello World JAX-WS. TestService.java

package com.journaldev.jaxws.service;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;

@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class TestService {

	@WebMethod
	public String sayHello(String msg){
		return "Hello "+msg;
	}
	
	public static void main(String[] args){
		Endpoint.publish("https://localhost:8888/testWS", new TestService());
	}
}

Вот и все. Просто запустите это приложение, и наш веб-сервис Hello World JAX-WS SOAP будет опубликован. На изображении ниже показано вызов этого веб-сервиса JAX-WS через SOAP UI. Это все для очень базового руководства по веб-сервису JAX-WS. Ниже приведены некоторые статьи, которые вы должны прочитать для лучшего понимания веб-сервисов SOAP и JAX-WS.

  1. Руководство по JAX-WS
  2. Развертывание веб-сервиса JAX-WS на Tomcat
  3. Пример веб-сервиса SOAP с использованием Eclipse и Apache Axis
  4. Руководство по веб-сервисам Apache Axis 2

Привет, мир! Приложение JAX-RS

Jersey – это эталонная реализация API JAX-RS, она не является частью стандартного JDK, и мы должны включить все необходимые файлы JAR. Лучший способ – использовать сборку Maven. Для этого создайте простой динамический веб-проект, а затем преобразуйте его в Maven в Eclipse. Вот окончательный файл pom.xml с необходимыми зависимостями.

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JAX-RS-HelloWorld</groupId>
	<artifactId>JAX-RS-HelloWorld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	
	<dependencies>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-server</artifactId>
			<version>1.19</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-servlet</artifactId>
			<version>1.19</version>
		</dependency>
	</dependencies>
	
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

Теперь добавьте сервлет Jersey в наш дескриптор развертывания web.xml в качестве фронт-контроллера.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>JAX-RS-HelloWorld</display-name>

	<servlet>
		<servlet-name>Jersey REST Service</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>com.sun.jersey.config.property.packages</param-name>
			<param-value>com.journaldev.jaxrs.service</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Jersey REST Service</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

Вышеуказанные два шага необходимы для начальной настройки, ниже представлен наш класс сервиса Hello World JAX-RS.

package com.journaldev.jaxrs.service;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/test")
public class TestService {

	@GET
	@Path("/hello/{msg}")
	public String sayHello(@PathParam(value="msg") String msg){
		return "Hello "+msg;
	}
}

Просто экспортируйте его как WAR-файл, а затем получите к нему доступ в браузере, как показано на изображении ниже. Вы можете изменить последнюю часть URL, и возвращаемое сообщение изменится соответственно. Вы можете увидеть, насколько легко было создать веб-сервис RESTful с использованием API JAX-RS. Однако есть еще многое, чему можно научиться, читайте далее в статьях ниже.

  1. RESTful веб-сервисы
  2. Руководство по RESTEasy
  3. Руководство по Jersey

Вот вам краткое введение в веб-сервисы на Java. Наконец, если вы готовитесь к интервью, просмотрите вопросы по интервью о веб-сервисах. Ссылки: Страница JAX-WS Oracle, Страница JAX-RS Oracle

Source:
https://www.digitalocean.com/community/tutorials/java-web-services-tutorial