Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Do que se trata o artigo:

O artigo apresenta o estilo de desenvolvimento contract-first para web services utilizando o framework Spring Web Services (Spring-WS). O foco do estilo contract-first são as mensagens XML, deixando o código da linguagem de implementação desacoplado do contrato do serviço.


Para que serve:

Com o Spring-WS é possível construir web services utilizando boas práticas de desenvolvimento, de forma simples e prática. O framework se destaca por não necessitar de geração de código Java no processo de desenvolvimento do cliente ou do servidor.


Em que situação o tema é útil:

O assunto é relevante para web services de médio e grande porte que necessitem manterem-se estáveis ao longo do tempo, garantindo estabilidade e interoperabilidade. Para web services de pequeno porte o desenvolvimento contract-last ainda é mais adequado.

Spring Web Services:

Existem dois estilos diferentes de desenvolvimento de web services: Contract Last e Contract First. O estilo contract-last implica em gerar um WSDL automaticamente a partir do código Java. No estilo contract-first, primeiro cria-se o contrato WSDL, e então, mapeiam-se as mensagens XML para endpoints implementados em Java.

O estilo contract-first apresenta vantagens para web services de médio e grande porte os quais possuem rígidos requisitos para manterem-se constantes ao longo do tempo. O Spring Web Services facilita o desenvolvimento contract-first, focando no desenvolvimento de um XML schema que será utilizado para gerar o contrato WSDL.

O Spring-WS ainda oferece a possibilidade de implementar endpoints nas mais variadas tecnologias de parsing XML. O framework ainda disponibiliza um recurso de interceptors que auxilia na implementação de requisitos não funcionais, como segurança, logging, validação, etc. Por fim, na parte do desenvolvimento de clientes para Web services, o Spring-WS possui um template que permite invocar serviços com simplicidade.

Este artigo será composto por duas partes. Nesta primeira parte apresentaremos uma introdução ao Spring-WS e ao desenvolvimento contract-first. Na próxima parte apresentaremos assuntos mais avançados, como mapeamento Objeto/XML e autenticação com WS-Security.

Existem dois estilos diferentes de desenvolvimento de web services: Contract Last e Contract First. A abordagem mais comum, com a qual o leitor provavelmente já está acostumado, é o desenvolvimento contract-last. Este estilo de desenvolvimento implica em desenvolver código Java, e a partir dele, gerar o contrato (WSDL) automaticamente. Vários frameworks oferecem esta abordagem, dentre eles os mais famosos são o Axis e o CXF (antigo XFire). Já no desenvolvimento contract-first primeiro cria-se o contrato WSDL, e então, usa-se Java para implementá-lo.

Existe uma grande tendência nos desenvolvedores em pensar em web services como sendo a exposição de métodos Java para acesso remoto. Inicialmente, essa era a idéia. Web services eram considerados apenas outra forma de realizar chamada remota de procedimentos (RPC). Porém, com o tempo, descobriu-se que utilizar documentos XML (document-driven) para troca de mensagens entre cliente e servidor é uma grande vantagem, pois aumenta a interoperabilidade e facilita a estruturação e validação dos dados. Dessa forma, podemos dizer que um web service é melhor comparado com uma fila de mensagens (como JMS por exemplo), ao invés de RPC. Além disso, XML é uma representação neutra da informação e independente de plataforma. O foco no desenvolvimento de web services deve ser no XML, e não em código Java.

A princípio, em questão de minutos, é possível utilizar a IDE (ou outra ferramenta) para criar um web service a partir de um método. Essa abordagem funciona, principalmente para pequenos projetos, mas não é a melhor solução quando se trata de sistemas de médio/grande porte. A abordagem contract-first diminui o acoplamento entre o contrato e a implementação, aumenta a interoperabilidade e a facilidade de manutenção. Entretanto, convencer um time de desenvolvimento a utilizar contract-first não é uma tarefa fácil, pois implica em gastar mais tempo em tecnologias como XML schema (XSD) e WSDL, diminuindo o foco no código Java.

O Spring Web Services (Spring-WS) é um subprojeto do Spring Framework com foco em facilitar o desenvolvimento de Web services utilizando o desenvolvimento contract-first. O framework é capaz de gerar um WSDL baseando-se em um XSD, e então, mapear as mensagens para endpoints. O Spring-WS ainda oferece abstrações sobre APIs de parsing XML, suporte a WS-Security e a diferentes protocolos de transporte.

Este artigo será composto por duas partes. Nesta primeira parte apresentaremos uma introdução à plataforma Spring-WS e ao paradigma contract-first. Na próxima parte apresentaremos assuntos mais avançados, como mapeamento Objeto/XML e autenticação com WS-Security.

Para melhor entendimento do artigo é assumido que o leitor possui conhecimentos básicos em tecnologias relacionadas a XML e web services como SOAP, XML schema e WSDL. Para leitores interessados em aprender estes temas, aconselho os excelentes tutoriais elaborados pela W3C disponíveis na seção de links.

Contract-first versus Contract-last

Antes de começarmos o desenvolvimento dos exemplos práticos vamos apresentar algumas razões para escolha de um desenvolvimento contract-first.

Fragilidade

Como já mencionado anteriormente, a abordagem contract-last implica no código Java gerar o contrato do web service (WSDL) automaticamente. Ao utilizar essa abordagem não existe nenhuma garantia que o contrato WSDL vai permanecer constante ao longo do tempo. Qualquer alteração na interface Java pode resultar em uma alteração indesejada no WSDL.

Outra desvantagem é que nem todos os frameworks geram o mesmo WSDL baseado em uma interface Java dificultando a mudança de implementação, por exemplo, migrar uma implementação em Axis para JAX-WS.

...
Quer ler esse conteúdo completo? Tenha acesso completo