Web Service é um conjunto de padrões, especificações e tecnologias usados para entregar serviços de aplicações na plataforma Web. Possibilita uma forma de Web programável, não apenas uma Web interativa implementada com páginas HTML estáticas ou páginas dinâmicas implementadas por meio de PERL, ASP, JSP, JSF, entre outras. Web Services são componentes reutilizáveis de computação distribuída, implementados como blocos de construção caixa-preta (WANG; QIAN, 2005).
A forte adoção de Web Services na implementação de computação orientada a serviços está relacionada às suas características, dentre elas pode-se destacar: independência de plataforma e linguagens de programação, possibilidade de expor quaisquer funcionalidades de aplicações como serviço pela Internet e uso de padrões abertos (PAPAZOGLOU; HEUVEL, 2007).
Embora existam muitos outros arcabouços de componentes distribuídos disponíveis na indústria, tais como Common Object Request Broker Architecture (CORBA), Distributed Component Object Model (DCOM) e Enterprise JavaBeans (EJB), apenas Web Service fornece características completas de interoperabilidade, tais como: multiplataforma, multilinguagem, linguagens cruzadas, tecnologias cruzadas e soluções amigáveis para firewall de Internet (WANG; QIAN, 2005).
Segundo Wang e Qian (2005), implementar computação distribuída por meio da tecnologia Web Services, reúne as seguintes vantagens:
• aumenta a portabilidade e interoperabilidade da computação distribuída; • aumenta a reusabilidade e escalabilidade de componentes distribuídos; • reduz a complexidade da composição e implantação de componentes; • simplifica a administração do sistema distribuído;
• facilita a publicação de código legado por meio de interfaces distribuídas de serviços.
Outro fator importante para a adoção de Web Service, é a existência de especificações controladas por consórcios que o torna menos vulnerável às questões particulares de uma ou outra implementação. É baseado em padrões abertos, tais
como: descrição de serviços por meio da Web Services Description Language2
(WSDL); protocolo de transporte por meio do Simple Object Access Protocol3(SOAP);
e registro e descoberta de serviços por meio do Universal Description, Discovery and Integration4(UDDI), definidos como extensões de elementos XML.
Protocolo SOAP
Web Services podem ser divididos em dois grupos de tecnologia de implementação: Web Services baseados em SOAP e Web Services de estilo Representational State Transfer (REST). Nas implementações de Web Services baseados em SOAP, a comunicação entre o cliente e provedor do serviço ocorre por meio de mensagens SOAP. O cliente envia uma mensagem de solicitação de serviço, por meio de um envelope SOAP, e o Web Service responde com uma mensagem de retorno, também por meio de um envelope SOAP.
Figura 13: Arquitetura de Web Service baseado em SOAP
Fonte: Kalin (2010, p. 2)
A Figura 13 ilustra essa troca de envelopes SOAP. A tecnologia REST é caracterizada como um estilo arquitetural de desenvolvimento de Web Services. Nesse estilo, não existe o protocolo SOAP para transporte de dados, ao invés disso, o transporte é feito diretamente com o protocolo HTTP (KALIN, 2010).
SOAP é um protocolo de troca de mensagens baseadas em XML, especificado pelo consórcio W3C. É usado para especificar o formato de requisições e respostas na comunicação de Web Services mais comumente usado sobre protocolo HTTP, com o método HTTP POST. Cada mensagem SOAP tem um envelope que identifica um documento XML como uma mensagem SOAP. O envelope SOAP pode conter um subelemento cabeçalho (Header), deve conter o elemento corpo (Body) e opcionalmente o elemento Mime para anexos (WANG; QIAN, 2005). A Figura 14 ilustra a estrutura do envelope SOAP.
2http://www.w3.org/standards/webofservices/description 3http://www.w3.org/standards/techs/soap
Figura 14: Estrutura do envelope SOAP
Fonte: Kumar, Narayan e Ng (2012, p. 58)
As mensagens SOAP podem conter informações textuais e binárias. As informações textuais são inseridas no elemento Body do envelope e as informações binárias são inseridas como anexos MIME. O elemento Header é opcional e pode conter informações complementares aos dados contidos no elemento Body, como dados de transação, autenticação, autorização, dentre outras (KUMAR; NARAYAN; NG, 2012).
Descritor WSDL
A especificação da Web Services Description Language (WSDL) fornece a estrutura e o formato de elementos XML para descrever Web Services. A especificação WSDL especifica uma linguagem para descrever as funcionalidades abstratas, bem como uma estrutura para descrever os detalhes concretos do serviço. A especificação também define os critérios de conformidade de documentos escritos a partir da especificação WSDL (W3C, 2007).
Um arquivo WSDL contém a descrição de um ou mais serviços por meio de um conjunto pré-definido de elementos XML, que representam a definição e a descrição completa das informações de um Web Service. Como o documento WSDL é uma extensão da XML, os aplicativos clientes podem processar esse arquivo com o objetivo de obter as informações necessárias para entender e usar o Web Service.
A Figura 15 ilustra o conteúdo do arquivo WSDL, formado pelo elemento definitions, que abriga cinco subelementos: uma ou mais ocorrência dos elementos type, message e portType, uma ocorrência dos elementos binding e service. Os elementos type, message e portType formam a parte abstrata do WSDL e os elementos binding e service formam a parte concreta do WSDL, vinculando ao
Figura 15: Estrutura do documento WSDL
Fonte: Kumar, Narayan e Ng (2012, p. 92)
protocolo de transporte e endereço real do serviço (KUMAR; NARAYAN; NG, 2012). Figura 16:Triângulo Web Services
Fonte: adaptado de Kumar, Narayan e Ng (2012, p. 79)
O WSDL é um componente chave da implementação de computação orientada a serviços usando Web Service com SOAP. A Figura 16 ilustra os três elementos de uma SOA. O Provedor é responsável por fornecer o serviço e publicar o descritor WSDL de seus serviços. O Agente é responsável por armazenar informações sobre os WSDL e viabilizar mecanismos de buscas aos potenciais clientes consumidores. Por último, o Cliente busca os serviços no Agente e, por meio dos WSDL dos serviços localizados, vincula-se ao Provedor para invocar e consumir os serviços desejados.
Para Web Services com implementação REST, não existe um equivalente WSDL padronizado e largamente difundido. Existe uma iniciativa de um grupo de pesquisa ligado à tecnologia Java, cujo objetivo é a definição de um descritor
de serviços com estilo REST. Essa proposta de especificação é denominada Web Application Description Language5(WADL) (KALIN, 2010).