Web Services Apresentação para a Febraban Apresentação • Objetivos da apresentação – Demonstrar para stakeholders (particularmente da Febraban) as características técnicas da primeira geração de web services do BC; – Conteúdo essencialmente técnico. Objetivos • Portabilidade: – O padrão escolhido deverá garantir a portabilidade dos projetos sem afetar a independência de plataforma cliente; • RAD: – O consumo de web services deverá ser possível sem que as equipes de TI das IFs tenham que se aprofundar nos meandros de uma nova tecnologia. Objetivos (cont.) • Independência de IDE: – O auxílio de uma IDE pode ser desejável, mas não necessário; • Interoperabilidade: – Os web services devem poder ser consumidos em outras plataformas (ex: .NET). Fatores decisivos • Maturidade da solução open-source (Axis); • Integração com IDEs; • Reutilização da segurança J2EE (rolebased); • Escalabilidade (implementação serverside e stateless); Passo 1: Definição do serviço • SOA – Service Oriented Architecture – Um serviço é uma função bem definida, auto-contida e que não depende do estado ou contexto de outros serviços; Passo 2: Implementação • Implementação do serviço: – O serviço a ser fornecido via web service deve ser identificado e “isolado” em uma API tipicamente stateless; – Normalmente este serviço já está implementado no “legado”, bastando definir e implementar uma API para seu acesso na plataforma original. Passo 3: Value Objects • Parâmetros de entrada e saída: – A API de um serviço deverá conter apenas tipos “compatíveis” com web services (tipos básicos, strings, arrays tipados ou estruturas – VOs – destes tipos. Passo 4: Criação do WS • Definições de interesse público: – Definição da API (e value objects); – Geração da definição formal do web service (WSDL); – Se VOs forem compatíveis, o WSDL conterá uma descrição completa das estruturas de dados (mesmo as complexas); – O WS é, na prática, implementado por uma aplicação web comum (HTTP/HTTPS), sem o uso de qualquer extensão proprietária. Passo 5: Segurança • Segurança em web services – Não há padrão de facto – segurança delegada à camada de transporte (HTTP/HTTPS); • Criptografia: – Acesso ao web service pode estar disponível apenas via HTTPS; • Segurança declarativa: – URLs de acesso a web services podem exigir autenticação (padrão J2EE); – Métodos de negócio podem estar autorizados a roles específicas (padrão J2EE); Passo 6: Publicação do WS • Publicação: – A publicação do web service é, fisicamente, como a publicação de uma aplicação web comum; – A definição pública do web service (WSDL) estará disponível para download pela própria aplicação web que o implementa; – API de web services será estável – modificações e atualizações serão divulgadas com antecedência (a exemplo do Catálogo de Mensagens do SPB); Passo 7: Consumo do WS • Geração do cliente: – Acesso à definição do web service (WSDL) é tudo que basta; – IDEs têm a capacidade de gerar stub cliente a partir do WSDL; Exemplos • Exemplos de consumo – Serão apresentados dois exemplos (.NET e Java) de criação de aplicações que consomem web services. Cliente .NET Criando um Cliente Web Services utilizando Visual Studio Criando uma Web reference - botão direito, opção add web reference Informando o endereço do WSDL Classes geradas • Ao criar uma Web reference, o Visual Studio, de posse das informações contidas no WSDL, cria todas as classes necessárias. Neste exemplo, são criadas: - ControleCliente ResumoDoCliente ResumoDaOperacao ResumoDoVencimento Formulário usado nos testes Código C# (1/3) using WindowsApplication1.WSControleCliente; ... private void btnConsultar_Click( object sender, System.EventArgs e) { ControleClienteService controle = new ControleClienteService(); controle.Credentials = new System.Net.NetworkCredential( txtUsuario.Text, txtSenha.Text); ... Código C# (2/3) ... ResumoDoCliente resCliente = controle.getResumoDoCliente( txtCodCliente.Text, txtTipoCliente.Text, dtpData.Value); ResumoDaOperacao[] listaResOperacao = resCliente. listaDeResumoDasOperacoes; ... Código C# (3/3) ... txtResposta.Lines = new String[] { "Cod. Cliente: " + resCliente.codigoDoCliente, "Tipo Cliente: " +resCliente.tipoDoCliente, "Modalidade da 1a operacao: " + listaResOperacao[1].modalidade, "CodVenc. do 1o venc. da 1a operacao: " + listaResOperacao[1].listaDeVencimentos[1]. codigoVencimento}; ... Resultado da consulta Cliente JAVA Criando um Cliente Web Services utilizando o JBuilder X (Axis) Adicionando um Web Service designer ao projeto Importando um serviço, através de uma URL Classes geradas • Após a importação, durante o build do projeto o Jbuilder (utilizando se do Axis) cria cria todas as classes necessárias para o acesso aos métodos expostos. Além disso ele também cria um “esqueleto” de uma classe de teste para o serviço. São criadas (entre outras) : - ControleClienteService ResumoDoCliente ResumoDoVencimento ResumoDaOperacao ControleClienteServiceTestCase Código JAVA (1/3) controleCliente.setUsername(USUARIO); controleCliente.setPassword(SENHA); String codCliente = "45988110"; String tipoCliente = "2"; Calendar data = Calendar.getInstance(); data.setTime(new Date("11/01/2002")); ResumoDoCliente resCliente = null; resCliente = controleCliente.getResumoDoCliente( codCliente, tipoCliente, data); Código JAVA (2/3) ResumoDoCliente resCliente = null; resCliente = controleCliente.getResumoDoCliente( codCliente, tipoCliente, data); ResumoDaOperacao[] listaResumoDaOperacao = resCliente.getListaDeResumoDasOperacoes(); ResumoDoVencimento[] listaResumoDoVencimento = listaResumoDaOperacao[1].getListaDeVencimentos( ); Código JAVA (3/3) System.out.println("Cod. Cliente: " + resCliente.getCodigoDoCliente()); System.out.println("Tipo Cliente: " + resCliente.getTipoDoCliente()); System.out.println("Modalidade da 1a operacao: " + listaResumoDaOperacao[1].getModalidade()); System.out.println("CodVenc. do 1o venc. da 1a operacao: " + listaResumoDaOperacao[1].getListaDeVencimentos( )[1].getCodigoVencimento()); Resultado Conclusões • Simplicidade – Todo o processo de desenvolvimento de web services (e de seus clientes) se dá sem que seja necessário conhecer a sintaxe WSDL nem tampouco o protocolo SOAP; – Solução de segurança está nivelada ao protocolo de transporte (SSL + autenticação com usuários virtuais).