1 Web Services Júlio Gerchman
2 Motivação XML Web Services Desacoplar componentes Formato padrão –“Consumível” pela máquina –Legível por uma pessoa Orientado a mensagens –Mais flexível que apenas RPC Relativa resiliência a mudanças tecnológicas –Desacoplado do protocolo Serviços autônomos –Endpoints gerenciados individualmente
3 Vantagens Independência de plataforma e fornecedor Baixo acoplamento entre serviço e consumidor Reuso de serviços Padrões e protocolos abertos –Texto –Facilidade para o desenvolvedor HTTP: transporte mais comum –Proxies, firewalls –Simplicidade, ferramentas Simples
4 Desvantagens Overhead Interfaces imutáveis –Versionamento? Serviços de alto nível –Inexistentes, incipientes ou não padronizados –Lista interminável: WS-Tudo HTTP: transporte mais comum –Confiabilidade: indisponibilidade, particionamento, latência, sem garantia de entrega (apenas recebimento) Deveria se manter simples
5 Arquitetura Servidor: contêiner específico –Adaptador, contêiner, aplicação Cliente: biblioteca –Marshalling, unmarshalling –Envio e recebimento –Descoberta de serviços
6 Arquitetura: camadas (I) Transporte –HTTP, JMS, FTP, SMTP,... Mensagem –SOAP –Extensões Descrição –WSDL Processos (serviços) –UDDI, BPEL,...
7 Arquitetura: camadas (II) Segurança Comunicação HTTP, SMTP, FTP, JMS, IIOP,... Mensagens SOAP Extensões Descrição WSDL Processos (serviços) UDDI, BPEL, WS-etc Gerência
8 Ferramentas Dependente do fabricante –Diferencial competitivo –Geração, stubs, requisição, deploy Apache Axis: Java –java2wsdl, wsdl2java, AdminClient Sun JWSDP: Java –wsimport, wsgen, jax-ws.xml NuSOAP: PHP.NET Web Services, Mono Web Services –wsdl.exe
9 Usando Google SOAP API Versão beta, experimental Necessário requisitar chave –1000 queries/dia
10 NuSOAP include ('nusoap.php'); $soapclient = new soapclient(' $params = array('key' => $licensekey, 'q' => $sitequery,...); $ret = $soapclient->call('doGoogleSearch', $params, 'urn:GoogleSearch'); foreach($ret['resultElements'] as $result) { print $result['URL']; print $result['snippet']; }
11 Apache Axis wsdl2java GoogleSearch.wsdl -p com.google.api –com/google/api/*.java –Service, Locator, Port, BindingStub –GoogleSearchResult, ResultElement, DirectoryCategory public static void main(String[] args) throws ServiceException, RemoteException {... GoogleSearchService locator = new GoogleSearchServiceLocator(); GoogleSearchPort port = locator.getGoogleSearchPort(); GoogleSearchResult result = port.doGoogleSearch(licenseKey, q, 0, 10, false, "", false, "", "", ""); ResultElement[] elements = result.getResultElements(); for (int i = 0; i < elements.length; i++) { System.out.println(elements[i].getURL()); System.out.println(elements[i].getSnippet()); }
12 Mono Web Services mono wsdl.exe GoogleSearch.wsdl –GoogleSearchService.cs mcs /target:library GoogleSearchService.cs -r:System.Web.Services –GoogleSearchService.dll public static void Main() {... GoogleSearchService service = new GoogleSearchService(); GoogleSearchResult result = service.doGoogleSearch(...); foreach (ResultElement e in result.resultElements) { Console.WriteLine(e.URL); Console.WriteLine(e.snippet); }
13 Microsoft Visual C# Express Web References
14 Conclusões Independência de plataforma e fornecedor Padrões e protocolos abertos Extensões e serviços de nível mais alto –Flexibilidade –Padronização difícil Overhead Orientado a mensagens –Estilo RPC é o mais comum
15 Trabalhos futuros Compatibilidade entre bibliotecas –Mensagens simples –Mensagens complexas Referências Herança Desempenho
16 Web Services Júlio Gerchman