Bem-vindo ao Tutorial de Java Web Services. Aqui aprenderemos sobre serviços da web, conceitos úteis em serviços da web e os diferentes tipos de API que temos em Java para criar serviços da web.
O que é um Serviço da Web
Em palavras simples, serviços que podem ser acessados pela rede são chamados de serviços da web. Então, como isso difere de uma aplicação web? Elas também são serviços 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 em um formato legível para humanos, enquanto os serviços da 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 da web tradicionais usam o protocolo SOAP. Recentemente, REST está se tornando popular, sendo um estilo de arquitetura que quase sempre é executado no protocolo HTTP/HTTPS.
- As aplicações web não são destinadas à reutilização, ao contrário dos serviços da web. Um único serviço da web pode ser usado por diferentes tipos de aplicações.
- As aplicações web podem acessar serviços da web para obter alguns dados ou realizar algumas tarefas, mas os serviços da web não podem acessar aplicações web para buscar dados.
- As aplicações web são capazes de manter a sessão do usuário, enquanto os serviços da 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.
Tipos de Serviços Web
Há dois tipos de serviços web.
- SOAP: SOAP significa Simple Object Access Protocol. SOAP é um protocolo padrão da indústria baseado em XML para o design e desenvolvimento de serviços web. Por ser 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.
- REST: REST é um estilo arquitetural para o desenvolvimento de serviços web. Está ganhando popularidade recentemente porque possui uma curva de aprendizado menor em comparação com SOAP. Recursos são conceitos centrais dos serviços web Restful e são identificados de forma única por seus URIs.
Serviços Web em Java
O Java fornece sua própria API para criar tanto serviços web SOAP quanto REST.
- JAX-WS: JAX-WS significa Java API for XML Web Services. JAX-WS é uma API Java baseada em XML para construir servidor e aplicação de cliente de serviços web.
- JAX-RS: Java API for RESTful Web Services (JAX-RS) é a API Java para criar serviços web REST. JAX-RS utiliza anotações para simplificar o desenvolvimento e implementação de serviços web.
Ambos esses APIs fazem parte da instalação padrão do JDK, então não precisamos adicionar nenhum jar para trabalhar com eles. Ambos esses APIs usam anotações muito intensivamente.
Aplicação Hello World JAX-WS
Vamos criar uma aplicação Hello World JAX-WS 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 é tudo. Basta executar esta aplicação e nosso serviço da web SOAP Hello World JAX-WS será publicado. A imagem abaixo mostra a invocação deste serviço da web JAX-WS através do SOAP UI. Isso é tudo para um tutorial muito básico de serviço da web JAX-WS. Abaixo estão alguns dos artigos que você deve ler para entender melhor os serviços da web SOAP e JAX-WS.
- Tutorial JAX-WS
- Implantação de Serviço da Web JAX-WS no Tomcat
- Exemplo de Serviço da Web SOAP usando Eclipse e Apache Axis
- Tutorial de Serviços da Web Apache Axis 2
Aplicação Olá Mundo 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 Olá Mundo 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 aprender, siga os artigos abaixo para aprender mais.
Isso é tudo para uma rápida introdução dos serviços web Java, finalmente se você estiver se preparando para qualquer entrevista, então passe pelas 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