Tutorial de Serviços Web em Java

Bem-vindo ao Tutorial de Serviços Web Java. Aqui vamos aprender sobre serviços web, conceitos úteis em serviços web e depois diferentes tipos de API que temos em Java para criar serviços web.

O que é um Serviço Web

Em palavras simples, os serviços que podem ser acessados pela rede são chamados de serviços web. Então, como isso difere de uma aplicação web? Elas também são serviços que são acessados pela rede. Existem algumas características que esclarecem essa diferença.

  • As aplicações web são destinadas aos usuários e devem ser acessadas no navegador com formato legível para humanos, enquanto os serviços web são destinados a aplicações para acessar dados no formato XML, JSON, etc.
  • As aplicações web sempre usam o protocolo HTTP/HTTPS, enquanto os serviços web tradicionais usam o protocolo SOAP. Recentemente, o REST está ganhando popularidade, que é um estilo de arquitetura e quase sempre é executado no protocolo HTTP/HTTPS.
  • As aplicações web não são destinadas à reutilização, enquanto este é um dos benefícios dos serviços web. Um único serviço web pode ser usado por diferentes tipos de aplicações.
  • As aplicações web podem acessar serviços web para acessar alguns dados ou realizar algumas tarefas, mas os serviços web não podem acessar aplicações web para buscar alguns dados.
  • As aplicações web são capazes de manter a sessão do usuário, os serviços web são sem estado.

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.

Tipo de Serviços Web

Há dois tipos de serviços web.

  1. SOAP: SOAP significa Protocolo de Acesso a Objetos Simples. SOAP é um protocolo padrão da indústria baseado em XML para projetar e desenvolver serviços web. Como é baseado em XML, é independente de plataforma e linguagem. Portanto, nosso servidor pode ser baseado em JAVA e o cliente pode ser em .NET, PHP etc. e vice-versa.
  2. REST: REST é um estilo arquitetural para desenvolver serviços web. Está ganhando popularidade recentemente porque tem uma curva de aprendizado pequena quando comparado ao SOAP. Recursos são conceitos centrais dos serviços web RESTful e são identificados de forma única por seus URIs.

Serviços Web Java

O Java fornece sua própria API para criar tanto serviços web SOAP quanto REST.

  1. JAX-WS: JAX-WS significa Java API para Serviços Web XML. JAX-WS é uma API Java baseada em XML para construir servidor e aplicativos de cliente de serviços web.
  2. JAX-RS: Java API para Serviços Web RESTful (JAX-RS) é a API Java para criar serviços web REST. JAX-RS usa anotações para simplificar o desenvolvimento e implantação de serviços web.

Ambas essas APIs fazem parte da instalação padrão do JDK, então não precisamos adicionar nenhum arquivo JAR para trabalhar com elas. Ambas essas APIs fazem uso intensivo de anotações.

Aplicação Hello World JAX-WS

Vamos criar uma aplicação JAX-WS Hello World muito simples. 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());
	}
}

É isso. Basta executar esta aplicação e nosso serviço web SOAP Hello World JAX-WS estará publicado. A imagem abaixo mostra a invocação deste serviço web JAX-WS através do SOAP UI. Isso é tudo para um tutorial muito básico de serviço web JAX-WS. Abaixo estão alguns artigos que você deve ler para entender melhor os serviços web SOAP e JAX-WS.

  1. Tutorial JAX-WS
  2. Implantação de Serviço Web JAX-WS no Tomcat
  3. Exemplo de Serviço Web SOAP usando Eclipse e Apache Axis
  4. Tutorial de Serviços Web Apache Axis 2

Olá Mundo Aplicação JAX-RS

Jersey é a implementação de referência da API JAX-RS, não faz parte do JDK padrão e precisamos incluir todos os JARs necessários. A melhor maneira é usar a construção do Maven, então crie um projeto web dinâmico simples e depois converta-o para Maven no Eclipse. Aqui está o arquivo pom.xml final com as dependências necessárias.

<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>

Agora adicione o servlet Jersey ao nosso descritor de implantação web.xml como controlador frontal.

<?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>

As duas etapas acima são necessárias para a configuração inicial, abaixo está nossa classe de serviço 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;
	}
}

Basta exportá-la como arquivo WAR e depois acessá-la no navegador, conforme mostrado na imagem abaixo. Você pode alterar a última parte do URL e a mensagem retornada mudará de acordo. Você pode ver como foi fácil criar um serviço web RESTful usando a API JAX-RS. No entanto, há mais a ser explorado, siga os artigos abaixo para aprender mais.

  1. Serviços Web RESTful
  2. Tutorial RESTEasy
  3. Tutorial Jersey

Isso é tudo para uma rápida introdução dos serviços web Java. Por fim, se você está se preparando para alguma entrevista, dê uma olhada nas Perguntas de Entrevista sobre Serviços Web. Referências: Página da Oracle sobre JAX-WS, Página da Oracle sobre JAX-RS.

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