REST usa JSON e SOAP usa XML, certo?

SOAP (Simple Object Access Protocol) e REST (Representation State Transfer) são duas arquiteturas diferentes de web services. Entretanto, um erro comum é achar que a principal diferença entre elas é que SOAP utiliza XML (eXtensible Markup Language) e REST utiliza exclusivamente JSON (JavaScript Object Notation). Por esta razão, este artigo apresenta os conceitos básicos destas duas tecnologias, visando um maior esclarecimento das suas características e diferenças.

Em uma breve descrição, SOAP é uma tecnologia desenvolvida pela Microsoft para acessar web services unicamente por meio de mensagens de requisições e respostas feitas em XML, substituindo as tecnologias que utilizavam mensagens binárias. Além das mensagens, utiliza-se XML para criar o arquivo WSDL (Web Service Description Language), que é um contrato entre o provedor e o consumidor do serviço, como se fosse uma assinatura de método para o serviço web. Outra característica do SOAP é que é independente do protocolo de transporte, ou seja, pode ser enviado com a maioria dos protocolos, por exemplo HTTP, SMTP, TCP e JMS.

Já o REST é uma arquitetura criada para ser mais simples de se usar que o SOAP. Este pode ser usado em vários formatos de texto, como CSV (Comma-separated Values), RSS (Really Simple Syndication), JSON e YAML. Porém, só pode ser utilizado com o protocolo HTTP/HTTPS, por exemplo utilizando os métodos GET, POST, PUT e DELETE. Por este motivo, o REST comporta-se como se fosse um navegador que sabe como usar um protocolo e seus métodos padronizados, sendo que o aplicativo deve se adequar a isto. Neste caso, os padrões do protocolo não são violados, por exemplo criando métodos extras, aproveitando assim os métodos nativos e criando as ações com eles em seu tipo de mídia.

A seguir, temos uma comparação das duas tecnologias, com as principais vantagens de cada uma:

SOAP

  • Protocolo de transporte independente (REST utiliza somente HTTP)
  • Trabalha melhor com sistemas distribuídos, pois REST trabalha com comunicação ponto-a-ponto
  • O arquivo WSDL pode gerar um certo tipo de automação quando usado com determinadas ferramentas

REST

  • Melhor curva de aprendizado
  • Mensagens menores e mais eficientes como o formato JSON comparado com XML
  • Os dados podem ser colocados em cache, retornando sempre a mesma resposta para a mesma requisição
  • Mais rápido pois precisa de menos processamento que o SOAP

Portanto, vimos que cada arquitetura possui vantagens e desvantagens e é preciso analisar caso a caso antes de escolher qual utilizar. Porém, por ser mais simples e utilizar um protocolo que já é vastamente adotado pela comunidade, o REST geralmente é a arquitetura mais indicada para implementar um web service. Além do mais, com REST podemos trabalhar com diferentes formatos de texto enquanto SOAP é limitado exclusivamente ao formato XML.

Referências

Web Services Usando Maven, Spring e JAXB [Parte 2]

No post anterior introduzimos a tecnologia de Web Services (WS) como uma ferramenta de integração entre sistema, que pelo fato de basear-se em mensagens no formato XML, oferece alta interoperabilidade. Mencionamos ainda alguns frameworks e APIs que podem ser usados para implementação de um WS em Java (veja o post completo aqui: Parte 1). Neste post iremos continuar nossa discussão, explorando a JAXB API.

Continue lendo “Web Services Usando Maven, Spring e JAXB [Parte 2]”

Web Services Usando Maven, Spring e JAXB [Parte 1]

É notável a heterogeneidade de recursos e tecnologias que compõem um sistema. Módulos desenvolvidos em linguagens diferentes, diversos sistemas de gerenciamento de banco de dados, serviços de diretório e serviços de mensagens são ambientes comuns dentre os módulos de uma aplicação enterprise. Diante deste cenário, a integração se torna um passo fundamental. Não apenas a integração entre os módulos do sistema, mas também entre funcionalidades disponibilizadas por ambientes externos. Em termos de interoperabilidade, a tecnologia de Web Service (WS) fornece o arcabouço necessário para tais integrações. Utilizando a linguagem Extensible Markup Language (XML) para modelar as informações, é possível a troca de mensagens entre os mais variados ambientes.

Este é o primeiro de uma sequência de posts no qual explicaremos em detalhes como desenvolver um WS em Java utilizando as tecnologias Spring e JAXB.

 

A criação de um WS permite que você exponha funcionalidades do seu sistema para acesso externo sem ficar limitado a uma linguagem de programação específica. Por exemplo, é possível que um sistema escrito em .Net da Microsoft se comunique com um sistema Java, uma vez que ambos esperam enviar/receber mensagens XML. Note que através da integração via WS é possível que dados em uma base SQL Server acessados via um sistema .Net sejam compartilhados com um sistema escrito em Java, que faz uso de uma base de dados Oracle.

O fato do cliente e WS se comunicarem através de mensagens XML implica na escrita de código específico capaz de gerar dados XML, do ponto de vista do cliente, e processar esse XML, do ponto de vista do WS. Contudo, a manipulação direta de dados textuais pode ser uma tarefa trabalhosa, dispendiosa e propícia a erros. Felizmente, quando se trata de soluções Java, esse código pode ser facilmente programado com auxilio da Java Architecture for XML Binding (JAXB) API.

A JAXB API permite aos desenvolvedores Java mapear classes para representações XML. Isso ocorre nos dois sentidos da comunicação: cliente para WS, e WS para cliente [1]. Mais tecnicamente, a JAXB permite que sejam realizadas as operações de marshalling e unmarshalling. Esta consiste na conversão de um XML em objetos Java, enquanto que aquela é definida pela conversão de objetos Java em XML. Deste modo, é possível representar as mensagens XML em memória através de objetos Java.

É possível observar a atuação do JAXB como parte da solução de implementação do WS. A camada extra processa os XMLs de entrada convertendo-os em objetos Java, bem como converte os objetos Java gerando os XMLs de resposta.

No próximo post iniciaremos a implementação do nosso WS. Apresentaremos os requisitos do serviço que será implementado e mostraremos como as classes Java podem ser facilmente programadas para manipular mensagens XML através da JAXB API.

Referências

[1] http://www.oracle.com/technetwork/articles/javase/index-140168.html

Links Externos

Spring

JAXB