Sumário I - Introdução Estrutura do trabalho II - A Evolução dos Sistemas Distribuídos Arquitetura Cliente / Servidor Arquitetura Orientada a Objetos Internet / Intranet Arquiteturas Distribuídas Orientadas a Objetos CORBA x DCOM J2EE x .NET Web Services III – Arquitetura Componentes (components) Papéis (funções) – Roles Operações – Operations IV - Protocolos XML – Extensible Markup Language Exemplo de documento XML Elementos XML (XML elements) Elementos XML possuem relacionamentos Atributos XML XML embutido em HTML XML News XML Namespaces Usando Namespaces SOAP (Simple Object Access Protocol) Bloco de estrutura SOAP Esqueleto de mensagens SOAP Envelope SOAP O xmlns:soap namespace O Atributo encodingStyle Header SOAP O atributo Actor (autor) O atributo mustUnderstand SOAP Body WSDL Estrutura WSDL WSDL ports Bindings SOAP UDDI – Universal Description, Discovery and Integration Discovery direto Discovery indireto API UDDI UDDI Business Registry Páginas Brancas (White Pages) Páginas Amarelas (Yellow Pages) Páginas Verdes (Green Pages) Arquitetura UDDI Sites-Operadores 7 9 10 11 11 12 13 14 14 15 16 17 20 20 21 22 23 24 26 26 27 28 28 29 30 31 31 32 32 33 33 34 34 35 36 36 37 38 38 38 39 39 39 40 40 40 41 41 42 Registrars V – Segurança Segurança ao nível de Transporte SSL PKI IPSec Segurança ao nível de XML XKMS (XML Key Management Services WS-Security VI - Aplicação de WS em B2B Vantagens e Desvantagens do WS VII - Como o Mercado apoia o padrão Microsoft Sun Microsystems Oracle META Group OASIS TechMetrix Research Forrester Research Inc VIII – Conclusão Referências 42 43 44 44 44 45 47 48 48 50 52 54 54 54 55 55 55 56 56 57 58 I - Introdução Durante o curso de especialização, tivemos contato com as principais tecnologias de sistemas de informação e acompanhamos o sua evolução impulsionada, entre outros motivos, pela enorme necessidade de integração entre os sistemas. Optamos por abordar neste trabalho de final de curso uma nova tecnologia que se apresenta atualmente como a preconizadora de uma grande revolução nas comunicações entre as aplicações: os Web Services. Alguns dos aspectos da tecnologia de Web Services nos despertam muita atenção porque, em primeiro lugar, eles são processados via Internet (à qual praticamente toda empresa está conectada), Intranet ou outras redes baseadas em IP. Em segundo lugar, importantes fornecedores de tecnologia, como IBM, Microsoft, Oracle e Sun, concordaram em apoiar um conjunto de padrões que definem como sistemas diferentes devem interagir entre si, num nível até então improvável de cooperação entre concorrentes. Além disso, a abordagem de Web Services não torna necessariamente as tecnologias de integração anteriores obsoletas, mas viabiliza tipos de integração anteriormente muito complexos. Ao longo deste trabalho pretendemos apresentar ao leitor de forma abrangente os principais aspectos desta nova tecnologia e colocá-lo em contato com a nova tendência de desenvolvimento de software proposto por ela. A fim de obter informações atualizadas, este trabalho contou com uma pesquisa realizada exclusivamente em sites da Internet, onde um vasto material sobre este assunto pode ser encontrado com facilidade. Os endereços acessados encontram-se listados ao final deste trabalho onde informações ainda mais aprofundadas podem ser obtidas. Estrutura do trabalho No capítulo seguinte é descrito de maneira breve a evolução dos sistemas computacionais distribuídos desde a arquitetura centralizada, Client-Server, Aplicações Distribuídas, Objetos Distribuídos, o surgimento de aplicações para a Internet até a necessidade de se obter uma interoperabilidade entre estas aplicações nos dias atuais. O capítulo III descreve mais detalhadamente o conceito de Web Services e apresenta a sua Arquitetura e elementos. No capítulo IV serão apresentados os principais protocolos utilizados em Web Services, tais como SOAP, UDDI, WSDL pretendendo assim mostrar como estes protocolos se encaixam para formar a base desta nova arquitetura. O capítulo V dedica-se a rever alguns dos principais protocolos de segurança desenvolvidos para suportar as aplicações distribuídas e mostrar como eles podem ser aplicados para garantir transações seguras em Web Services. Além de citar os novos protocolos especialmente desenvolvidos para este fim. O sexto capítulo deste trabalho apresenta como a arquitetura de Web Services se encaixa neste novo contexto de aplicações distribuídas e B2B além de apresentar quais os benefícios que ela traz tanto aos desenvolvedores quanto para os usuários. Neste capítulo também, será apresentado quais as situações em que a aplicação de Web Services não é a mais adequada. No capítulo VII apresentamos as ações de algumas das principais empresas envolvidas na padronização da Arquitetura de Web Services, quais as tendências em relação à movimentação do mercado em torno do Web Services e algumas pesquisas que apontam o que está previsto para os próximos anos. II - A Evolução dos Sistemas Distribuídos Arquitetura Cliente / Servidor No início da década de 90, a grande novidade nos sistemas corporativos era a arquitetura cliente/servidor, expressão que designa um tipo de arquitetura de sistemas que se contrapôs a dois modelos utilizados anteriormente: os sistemas centralizados e os micros isolados. No primeiro, todos os dados e funcionalidade do sistema da empresa residiam em computadores de grande porte, os chamados Mainframes. Os terminais utilizados não possuíam nenhuma capacidade de processamento ou armazenamento de dados local, caracterizando um sistema extremamente inflexível. Com o adventos das LANs (Local Area Network) a situação começou a melhorar. Os arquivos e programas mais importantes passaram a residir num servidor de arquivos, protegidos por senhas e backups automáticos. O gerenciamento das impressoras passou ser também centralizado, otimizando sua utilização. Todo o processamento ainda se concentrava na própria estação de trabalho do usuário. Entretanto, os sistemas baseados em bancos de dados, espinha dorsal da maioria das empresas, continuavam a residir nos Mainframes, com interfaces não-amigáveis. Para integrar os sistemas de bancos de dados aos microcomputadores que tornavam-se cada vez mais comuns nas mesas dos usuários, começou a ser difundido o conceito de arquitetura cliente/servidor. A grande novidade desta arquitetura é a separação dos aplicativos corporativos e do processamento de transações em duas partes, uma executada no servidor e outra na máquina do cliente. Nesses aplicativos distribuídos, a porção servidor é responsável pela segurança e pela integridade dos dados, enquanto o cliente serve para exibir os dados numa interface amigável e de modo personalizável ao usuário final. Este modelo, embora amplamente difundido, possui um alto custo de suporte e manutenção. Arquitetura Orientada a Objetos Na programação distribuída usando a arquitetura cliente-servidor, clientes e servidores podem ser implementados usando qualquer paradigma de programação. Assim, é possível que um serviço específico seja executado por um método de algum objeto. No entanto, mesmo que o cliente também tenha sido desenvolvido orientação a objetos, na comunicação entre o cliente e o servidor esse paradigma deve ser esquecido, devendo ser utilizado algum protocolo preestabelecido de troca de mensagens para a solicitação e resposta ao serviço. Um sistema de objetos distribuídos é aquele que permite a operação com objetos remotos. Dessa forma é possível, a partir de uma aplicação cliente orientada a objetos, obter uma referência para um objeto que oferece o serviço desejado e, através dessa referência, invocar métodos desse objeto, mesmo que a instância desse objeto esteja em uma máquina diferente daquela do objeto cliente. O conceito básico que suporta plataformas de objetos distribuídos é o conceito de arquiteturas de objetos. Essencialmente, uma arquitetura orientada a objetos estabelece as regras, diretrizes e convenções definindo como as aplicações podem se comunicar e interoperar. Dessa forma, o foco da arquitetura não é em como a implementação é realizada, mas sim na infraestrutura e na interface entre os componentes da arquitetura. No paradigma de arquiteturas de objetos, há três elementos principais. A arquitetura OO fornece uma descrição abstrata do software, que categorias de objetos serão utilizadas, como estarão particionados e como interagirão. As interfaces são as escrições detalhadas das funcionalidades do software. Finalmente, a implementação é composta por módulos de software que suportam as funcionalidades especificadas nas interfaces. O uso de interfaces permite isolar a arquitetura de um sistema de sua implementação. Dessa forma, o sistema pode ser construído com um alto grau de independência em relação às implementações específicas de suas funcionalidades, ou seja, é possível substituir implementações específicas com pequeno impacto sobre o sistema como um todo. A adoção do paradigma de arquitetura de objetos permite também atingir um alto grau de interoperabilidade através da adoção de uma infra-estrutura padronizada de comunicação entre objetos através das interfaces. Assim, cada componente da arquitetura deve se preocupar apenas em como se dará sua comunicação com a infra-estrutura de comunicação. Internet / Intranet A partir de 1994, o fenômeno da Web mostrou um novo modelo de integração de sistemas, constituindo-se de padrões abertos, com maior independência em relação aos fornecedores, trazendo um novo enfoque para a relação cliente/servidor. Por meio de formulários desenvolvidos em linguagem HTML (Hypertext Markup Language), clientes e servidores podem trocar informações, pode-se ter acesso a bancos de dados, documentos ficam a disposição de usuários na rede e grupos de trabalho encontram meios para o desenvolvimento de trabalhos colaborativos. Todas estas facilidades encontradas na Web acabaram sendo levadas para dentro das corporações, por meio de uma versão doméstica da Internet, a Intranet, tecnologia que vem varrendo o mundo empresarial. Embora a Intranet ainda apresente limitações no desenvolvimento de aplicações que acessem bancos de dados no estilo do modelo cliente/servidor, seu baixo custo e facilidade de implantação vêm fazendo com que cada vez mais empresas adotem esta tecnologia. Nos últimos anos diversos padrões foram propostos para a implementação do conceito de sistemas distribuídos. Um modelo muito popular tem sido o de separação de uma aplicação em camadas, apresentação, negócio e dados. No entanto, ainda nos deparamos com alguns problemas que impedem que este modelo desenvolva-se plenamente, tais como: complexidade de implementação e, principalmente, implantação. Sistemas escritos em diferentes linguagens, e não raro em plataformas distintas, sofrem ainda de um mal bem mais grave, a incompatibilidade entre os tipos de dados, além da necessidade de forte envolvimento das equipes técnicas de ambos os lados no processo de integração. Estas tem sido as principais causas da baixa integração entre os sistemas de clientes e fornecedores mesmo com toda a facilidade de infraestrutura de comunicação existente hoje em dia. Arquiteturas Distribuídas Orientadas a Objetos A necessidade de integração das aplicações que se encontravam em ambientes heterogêneos e a necessidade de comunicação entre elas em tempo-real fez com que a computação distribuída ganhasse cada vez mais espaço no mundo atual. O DCE (Distributed Computer Environment) foi o começo dessa tendência de computação distribuída em empresas, porém o DCE não era orientado a objeto, assim surgiu o CORBA, que é uma arquitetura de objetos para computação distribuída. e junto com o CORBA veio o DCOM da Microsoft. O DCOM era o principal concorrente do CORBA, a diferença entre essas duas tecnologias é que o CORBA roda em multiplataforma, enquanto o DCOM só em ambientes Windows. CORBA x DCOM O padrão CORBA (Common Object Request Broker Architecture), é um conjunto de especificações criado pela OMG (Object Management Group), um grupo formado por mais de 800 empresas da indústria de informática. Um sistema baseado em CORBA é composto por objetos distribuídos, que são elementos de software que implementam um determinado processamento e possuem uma determinada interface. O CORBA define uma camada intermediária (middleware) entre os objetos distribuídos da aplicação e a rede de comunicação. A localização do objeto e a linguagem na qual ele está implementado são mantidos totalmente transparentes. Detalhes de implementação e localização não precisam ser conhecidos para se fazer uma requisição a um objeto. Tudo que é necessário saber de um objeto CORBA para requisitá-los, é a sua interface. A interface de um objeto é definida através da linguagem IDL (Interface Definition Language), que é totalmente declarativa, não trazendo nenhum detalhe de implementação de objeto. A linguagem IDL permite definir os métodos e atributos de um objeto e exceções que ele pode gerar. Ela permite a independência de sistema operacional e de linguagem de programação para os objetos. Objetos clientes e servidor em diferentes linguagens e executando em diferentes sistemas operacionais podem interoperar sem nenhum problema. O DCOM foi criado pela Microsoft em 1996 como uma evolução natural do OLE/COM ( Object Linking Embedding/Component Object Model), lançado em 1993 com o objetivo de suportar a comunicação entre objetos distribuídos. O DCOM faz uso dos investimentos realizados no COM, tais como aplicações, componentes, ferramentas e conhecimento para ingressar no mundo da computação distribuída baseado nas padronizações já existentes. Trata-se de um protocolo que possibilita componentes de software se comunicarem diretamente sobre uma rede de maneira confiável. O COM define como deve ser a interação entre os objetos e seus clientes, sem a intermediação de qualquer componente do sistema. Analogamente às DLLs, que são códigos compilados prontos para uso, o modelo de componentes do DCOM seria uma versão “orientada a objeto” da DLL, com poderes ampliados tais como a reutilização de código. J2EE x .NET Com o J2EE (Java 2 Entreprise Edition) e a plataforma .NET, Sun Microsystems e Microsoft, respectivamente, travam um novo duelo de titãs na competitiva arena de desenvolvimento de aplicações para Internet. Com a .NET, a Microsoft introduziu uma plataforma capaz de competir em iguais condições com a J2EE (Java 2 Platform, Enterprise Edition), da Sun Microsystems. Java representa mais do que uma linguagem de programação, pois, ao lado da tecnologia de máquinas virtuais (JVM), permite compilar os programas, sem alterações, para serem executados em diversos equipamentos. A plataforma da Microsoft era, até pouco tempo atrás, essencialmente baseada no Windows e estava atrelada ao mundo do PC. Com o advento da .NET, a primeira grande diferença é que o ambiente de desenvolvimento agora ampliou sua atuação também para outros dispositivos e para acrescentar a contribuição de ferramentas de parceiros. Por outro lado, Mais do que uma plataforma de desenvolvimento de aplicações, a Sun Microsystems acena para o mercado com uma opção que segue o ideal de se trabalhar com soluções e sistemas abertos, enriquecidos por comunidades de desenvolvedores. Um outro fator muito importante e que promete aumentar ainda mais a disputa entre as duas plataformas é que tanto J2EE quanto .NET são compatíveis com os principais padrões relacionados aos Web Services, entre eles SOAP, WSDL e UDDI. Web Services Web Services tratam-se de uma forma simples e padronizada de utilizar a malha da Internet para implementar a integração entre sistemas heterogêneos, de forma bastante flexível, substituindo as tradicionais estratégias de EAI. O significado de “Enterprise Application Integration” (EAI), cuja tradução seria “Integração de Aplicações Corporativas”, mudou com o tempo. Há algum tempo, o termo era exclusivamente usado para designar a tentativa de uma empresa de interligar suas aplicações internas de negócios de forma que os dados possam ser compartilhados entre elas. Recentemente, o significado foi expandido para também englobar a união de dados e processos com parceiros comerciais externos. Não é raro que o ambiente de tecnologia seja bastante heterogêneo dentro de uma mesma empresa, com sistemas distintos para cada aplicação. Novas tecnologias e frameworks de desenvolvimento estão surgindo, tendo como objetivo uma maior integração entre os diversos aplicativos e serviços disponíveis na Internet. Este novo modelo em crescimento deve tratar tarefas complexas, como o gerenciamento de transações, através da disponibilização de serviços distribuídos que utilizem interfaces de acesso simples e bem definidas. Web Services permitem a integração entre sistemas distintos de forma bastante simples e direta. Uma das regras que nortearam a criação do padrão foi "não invente nada de novo". Basicamente um Web service funciona como uma página Web, com a diferença que ao invés de HTML, utiliza-se XML. Desta forma os dados podem ser descritos e o pacote da mensagem pode ser manipulado com grande facilidade tanto por quem envia, quanto por quem recebe.