3.3 Arquitetura dos Servic¸os Web
3.3.2 Linguagem para Descric¸˜ao de Interfaces WSDL
A WSDL (W3C, 2004b), definida pela W3C, ´e uma gram´atica XML, extens´ıvel, para descrever as interfaces dos Servic¸os Web. Atrav´es da WSDL ´e poss´ıvel separar a descric¸˜ao das funcionalidades oferecidas por um servic¸o dos detalhes concretos da sua implementac¸˜ao. A WSDL comec¸a descrevendo a troca de mensagens entre os agentes solicitantes e fornecedores de servic¸os. As mensagens s˜ao descritas de forma abstrata e ent˜ao adequadas para um protocolo de rede e formato de mensagens. Desde que os agentes concordem com a WSDL, a implementac¸˜ao do Servic¸o Web pode ser concretizada em qualquer linguagem de programac¸˜ao ou plataforma, como dito anteriormente.
A linguagem para descric¸˜ao de interfaces define o formato da mensagem, o tipo de dados, os protocolos de transporte e o formato de serializac¸˜ao de transporte que s˜ao usados entre o cliente e o servic¸o. Esta linguagem tamb´em especifica um ou mais locais de rede pelo qual o servic¸o pode ser invocado e pode indicar alguma informac¸˜ao sobre o padr˜ao de troca de mensagens que ´e esperado. A id´eia ´e similar a uma interface Java ou a uma IDL (Interface Definition Language) do CORBA. Em resumo, a descric¸˜ao do servic¸o representa um acordo que rege as interac¸˜oes do cliente com o servic¸o.
Figura 3.6: Estrutura sint´atica da WSDL (Weerawarana et al., 2005)
Basicamente, quando o cliente deseja enviar uma mensagem para um determinado Servic¸o Web, este obt´em a descric¸˜ao do servic¸o (atrav´es da localizac¸˜ao do respectivo documento WSDL), constr´oi a mensagem passando os tipo de dados corretos (parˆametros, etc), de acordo com a definic¸˜ao encontrada no documento que descreve a operac¸˜ao a ser invocada. Em seguida, a mensagem ´e enviada para o enderec¸o onde o servic¸o est´a localizado, a fim de que possa ser processada. O servic¸o, quando recebe esta mensagem, a valida conforme as informac¸˜oes contidas no documento WSDL. O servic¸o remoto sabe como tratar a mensagem, como process´a-la e como montar a resposta ao cliente.
A Figura 3.6 exibe a estrutura sint´atica da WSDL. Segundo (Weerawarana et al., 2005), um documento WSDL possui um elemento raiz chamado definitions, que por sua vez cont´em uma parte dita abstrata e outra parte dita concreta. A parte abstrata descreve o que o Servic¸o Web faz em termos da mensagem que este consome e produz, sem considerar como e onde o servic¸o ´e oferecido. Tal descric¸˜ao ´e responsabilidade dos elementos <types>, <message> e <portTypes>. J´a a parte concreta, define o “como” e “onde”. Isto se d´a atrav´es dos elementos <binding> e <service>.
A partir dos elementos exibidos na Figura 3.6, qualquer interface pode ser representada pela WSDL. A Tabela 3.1 descreve os principais elementos que comp˜oem a WSDL (Weer- awarana et al., 2005).
Para descrever melhor a func¸˜ao de cada elemento da Tabela 3.1, a Figura 3.7 cont´em a interface de um servic¸o, em linguagem Java, que ser´a adequada segundo a linguagem WSDL (Weerawarana et al., 2005). A interface possui o nome de StockQuoteService e possui um ´unico m´etodo chamado getQuote. O m´etodo recebe como entrada um tipo String e retorna um tipo float. Um exemplo de aplicac¸˜ao de tal interface ´e conhecer o valor (prec¸o) de determinado item em um estoque. O usu´ario entra com o nome do item e recebe o seu
3. Servic¸os Web 33 Tabela 3.1: Elementos presentes na WSDL
Elemento Descric¸˜ao
types A WSDL n˜ao define uma linguagem para descrever estrutura de dados, ao inv´es disso, utiliza-se de outras linguagens, como o XMLSchema. Desta forma, este elemento fornece informac¸˜oes sobre qualquer tipo de dado complexo usa- dos na WSDL.
message Permite descrever as mensagens que o Servic¸o Web est´a trocando. Na WSDL, mensagens podem consistir de uma ou mais partes, onde uma parte representa um ´unico item que est´a sendo enviado ou recebido.
portType Define o conjunto abstrato de operac¸˜oes mapeadas para um ou mais servic¸os, os quais s˜ao descritos como pontos finais de redes ou portas.
binding Descreve como a operac¸˜ao ´e invocada pelo protocolo utilizado e o formato de dados para as operac¸˜oes e mensagens.
service Declara o enderec¸o das portas para os bindings. Ou seja, indica onde encontrar um servic¸o usando sua porta (port).
valor.
1 public interface StockQuoteService { 2 public float getQuote(String symbol);
3 }
Figura 3.7: Interface de um servic¸o em linguagem Java
A partir da interface da Figura 3.7 os tipos de dados s˜ao mapeados para o XMLSchema correspondente, ou seja, o elemento types, Figura 3.8. As linhas 3 e 6 cont´em o elemento symbol, do tipo String, e getQuoteReturn, do tipo float, respectivamente, definidos na interface do servic¸os, conforme Figura 3.7.
1 <wsdl:types>
2 <schema elementFormDefault="qualified" targetNamespace="...">
3 <element name="symbol" type="xsd:string"/> 4 </schema>
5 <schema elementFormDefault="qualified" targetNamespace="..."> 6 <element name="getQuoteReturn" type="xsd:float"/>
7 </schema>
8 </wsdl:types>
Figura 3.8: XMLSchema descrito no elemento types
Ap´os a definic¸˜ao do elemento types, o elemento message, correspondente a interface da Figura 3.7, ´e descrito na Figura 3.9. A func¸˜ao de tal elemento ´e descrever as mensagens trocadas por cliente e servic¸o. As linhas 1 e 4 indicam como se d´a a resposta a um pedido do cliente e o como o cliente efetua o pedido, respectivamente.
O elemento portType define as operac¸˜oes que o servic¸o suporta. Uma operac¸˜ao ´e simples- mente um conjunto de mensagens que s˜ao trocadas entre clientes e servic¸o. Cada operac¸˜ao pode enviar ou receber no m´aximo uma mensagem em cada direc¸˜ao. Os tipos de operac¸˜ao
1 <wsdl:message name="getQuoteResponse">
2 <wsdl:part element="impl:getQuoteReturn" name="getQuoteReturn"/>
3 </wsdl:message>
4 <wsdl:message name="getQuoteRequest">
5 <wsdl:part element="tns1:symbol" name="symbol"/>
6 </wsdl:message>
Figura 3.9: Elemento message suportados s˜ao:
• one-way: uma mensagem chega ao servic¸o e este n˜ao retorna nenhuma resposta; • request-response: a mensagem chega ao servic¸o e este retorna uma mensagem em
resposta;
• solicit-response: o servic¸o envia uma mensagem e obt´em uma mensagem de retorno; • notification: o servic¸o envia uma mensagem e n˜ao recebe retorno do cliente.
A Figura 3.10 exibe o portType correspondente a interface descrita acima. A operac¸˜ao ´e do tipo Request-response (linhas 3 e 4).
1 <wsdl:portType name="StockQuoteService">
2 <wsdl:operation name="getQuote" parameterOrder="symbol">
3 <wsdl:input message="impl:getQuoteRequest" name="getQuoteRequest"/>
4 <wsdl:output message="impl:getQuoteResponse" name="getQuoteResponse"/> 5 </wsdl:operation>
6 </wsdl:portType>>
Figura 3.10: Elemento portType
A func¸˜ao do elemento binding ´e descrever como as mensagens interagem com um servic¸o em particular. A WSDL n˜ao assume um protocolo padr˜ao e permite que as men- sagens sejam trocadas usando SOAP, HTTP ou MIME. A Figura 3.11 descreve a interface acima em termos do seu elemento binding. Define que o formato das mensagens obedece ao tipo Soap:binding sobre HTTP, linha 2.
Por fim, o elemento service descreve onde encontrar o servic¸o (ver Figura 3.12, linha 3).