Você está na página 1de 8

www.adianti.com.

br

PHP5 e Web Services


por Pablo Dall'Oglio TAGS PHP, Web Services, SOAP, WSDL, XML. Resumo Este artigo visa discorrer de forma sucinta sobre o conceito de Web Services, as tecnologias e padres necessrios para sua implementao, bem como vislumbrar o novo cenrio que se configura no mercado de software em relao metodologias de desenvolvimento e sobre como as empresas podem utilizar essa tecnologia para tornarem-se mais competitivas, analisando os pontos de impacto em seus processos de construo de sistemas. Para ilustrar tudo, sero exibidos exemplos prticos, demonstrando como integrar aplicaes usando web services atravs do PHP.

1. Introduo
Web Services so uma das maiores inovaes advindas da utilizao da internet. Web Services permitem aplicaes se comunicarem umas com as outras, combinando funcionalidades de forma independente de plataforma ou linguagem [Chavda]. Web Services so servios disponibilizados pela internet, atravs de um conjunto de tecnologias independentes de plataforma, que permite interoperabilidade atravs de aplicaes, atravs da entrega de servios [Vaughan] e a comunicao entre aplicaes modularizadas, que podem ser descritas, publicadas e invocadas pela internet para utilizao imediata, ou mesmo composio de novos servios [Hansen] intregrando tudo atravs de padres abertos e conhecidos como XML, SOAP, WSDL e UDDI [Chung]. Ao contrrio de tecnologias como Corba, que propem um protocolo especfico, WS provm interoperabilidade atravs de XML [Vaughan] e da utilizao de padres abertos como SOAP, o que uma grande vantagem em relao aos seus antecessores [Chung]. Web Services podem ser utilizados com muita vantagem sobre tecnologias EDI, CORBA, DCOM, RPC, RMI, dentre outras, devido ao fato destas serem de difcil implementao ou utilizarem padres fechados, no ganhando aceitao dentre os fornecedores de software.

Figura1.Umambienteutilizandowebservices Uma das caractersticas mais atraentes na adoo de WS a possibilidade de criar novas aplicaes baseadas em componentes de sistemas legados, preservando investimentos, possibilitando interoperabilidade, disponibilidade no ambiente web e uma oportunidade para reverem seus processos de negcio [Arsanjani]. Uma gama enorme de aplicaes imediatas surge no contexto de WS. A interoperabilidade provida por WS, torna possvel agregar e publicar dinamicamente aplicaes como B2B e CMS [Chung]. Diversos servios pessoais como catlogo de endereos e anotaes de viagem poderiam ser desenvolvidos atravs de WS [Vaughan]. A internet, que comeou como um esforo de pesquisa militar e educacional, hoje se tornou a base do comrcio do sculo XXI. Neste contexto, os Web Services oferecem um novo modo de comunicao entre aplicaes e novas formas de negcio pela Web [Chavda]. Web Services podem ser utilizados dentro das empresas (intranet), comunicando aplicaes j existente, mas sua 1

PHP5 e Web Services

www.adianti.com.br maior vantagem fica visvel quando estes so expostos na internet combinando servios entre organizaes. As primeiras iniciativas de integrao e utilizao de WS partiro primeiro dentro empresas e depois entre as mesmas. Companias que j exercem frequente troca de dados entre aplicaes so fortes candidatas essa tecnologia [Chung], utilizando WS para integrar aplicaes j existentes (sistemas internos e externos) [Vaughan]. Tendo em vista este panorama, fica claro que a utilizao de padres abertos (SOAP mantido pelo W3C) e vastamente conhecidos para implementao/distribuio de WebServices so fatores preponderantes que acabam por levar sua adoo. HTTP (Hypertext Transfer Protocol) o protocolo padro usado sobre a porta 80 que responsvel pela requisio e transmisso de dados sobre a internet. XML Extensible Markup Language uma linguagem de marcao utilizada para descrever a informao nela contida. Ambos so padres utilizados mundialmente. No meio de todo o processo, provendo a comunicao entre as aplicaes, est o protocolo SOAP (Simple Object Access Protocol). SOAP um protocolo herdeiro do padro XML que encapsula um conjunto de regras para descrio de dados e processos, atravs de um mecanismo simples para definir a semntica de uma aplicao atravs de um modelo de empacotamento e um mecanismo de codificao [Chavda]. projetado para a troca de informaes em um ambiente descentralizado [Hansen] atravs do protocolo de comunicao HTTP e do formato XML [Vaughan]. Dessa forma, para uma aplicao trabalhar com WS, basta a compatibilidade com SOAP, tanto no lado do cliente (criando o documento XML com a informao necessria para invocar o servio) quanto no lado do servidor (responsvel por executar a mensagem como um interpretador) [Hansen]. SOAP pea central de um Web Service porque prove um mecanismo leve para troca de informao estruturada entre pares, em um ambiente descentralizado e disbribudo, usando XML. SOAP em si, no define o modelo de programao. Define sim, um mecanismo simples para expressar a semntica da aplicao atravs de um modelo de pacotes [Chavda]. A mensagem SOAP consiste de quatro elementos (envelope, cabealho, corpo e exceo). O envelope o elemento raiz da mensagem que descreve o que est na mensagem; Ele identifica a mensagem SOAP. O envelope tambm contm um cabealho opcional que contm a informaes especficas da mensagem. O corpo do envelope contm os dados direcionados para o recipiente (destino) da mensagem. O corpo tambm pode conter a exceo que usada para carregar mensagens de erro. uma forma padro de comunicar mensagens de erro de volta para o cliente.

2. Arquitetura
Atravs da figura a seguir, temos um panorama geral do funcionamento de Web Services, atravs de um conjunto de tecnologias de padro aberto, interagindo sob uma plataforma de internet. Temos o papel do Requerente, que a aplicao que interage com o Servico [Hansen], podendo ser desde um Desktop ou Servidor, at um Celular ou Palmtop. Temos o servidor de aplicao, que prov o servio e se comunica com o Requerente atravs da camada e pacotes SOAP. E temos o Registro do WS codificado em WSDL, publicado e descoberto atravs da especificao UDDI [Hansen].

Figure2.WebServicesArchitecture A aplicao cliente envia para aplicao servidora um pacote XML atravs do protocolo SOAP. A aplicao servidora processa esta requisio, de acordo com suas regras internas de negcio e retorna ao cliente a resposta tambm atravs de um pacote XML pelo protocolo SOAP. [Chavda]

2 PHP5 e Web Services

www.adianti.com.br informaes gerais como nome, descrio, endereo sobre a companhia que oferece o servio. As pginas amarelas contem a classificao geral dos dados em categorias da indstria, baseadas em padres taxonmicos para cada tipo de servio oferecido. As pginas verdes contm informaes tcnicas detalhadas sobre o Web Service, permitindo outra pessoa escrever uma aplicao utilizando este Web Service [Chavda]. Os Web Services registrados em um UDDI que podem estar inclusive em servidores diferentes [Fox]. Utilizando estes padres abertos, os desenvolvedores podem criar componentes abertos, que podem ser acessados de qualquer plataforma ou linguagem de programao capaz de se comunicar com os conhecidos protocolos da internet [Chavda]. Figure3.EnvelopeSOAP
<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"> <soap:Header> <h:fromxmlns:h="http://www.wrox.com/Header">SoapGuy@wrox.com</h:from> </soap:Header> <soap:Body> <w:GetSecretIdentityxmlns:w="http://www.wrox.com/heroes/"> <w:codename>XSLTMan</w:codename> </w:GetSecretIdentity> </soap:Body> </soap:Envelope>

Para descrever os servios, utilizada a linguagem WSDL (Web Services Description Language), baseada no formato XML que descreve um WS [Vaughan] atravs da definio das interfaces e os mecanismos de interao, contendo informaes como o protocolo, formato de dados, segurana, dentre outros [Hansen]. O WSDL descreve um conjunto de mensagens SOAP e fornece informaes necessria para os clientes interagirem com ele [Chavda]. WSDL especifica a localizao do WebService, as operaes que esto disponveis, os tipos de dados intercambiados e os protocolos de comunicao que sero utilizados. Um Web Service se torna disponvel quando colocado em um diretrio central chamado UDDI (Universal Description, Discovery and Integration). O UDDI um diretrio central onde os servios podem ser publicados, registrados e pesquisados por Web Services. Os dados armazenados no diretrio UDDI esto no formato XML. Os dados capturados dentro do UDDI esto divididos em trs categorias: pginas brancas, amarelas e verdes. As pginas brancas contm as

Figure4.DirefentesplataformasutilizandoWebServices

3 PHP5 e Web Services

www.adianti.com.br

3. Vantagens
Ao longo dos anos, a promessa de interoperabilidade tem sido ilusria. Presenciamos o surgimento de padres como DCOM e CORBA [Chung] e mais recentemente o de Web Services. A promessa, de que Web Services (WS) integraro PC's, dispositivos, bancos de dados, redes, em uma nica plataforma virtual, a internet, movendo funcionalidades desde aplicaes e dados do Desktop para servidores Web, que passaro a controlar segurana, privacidade e acessibilidade, lidando com aplicaes complexas e transaes crticas [Vaughan]. Mas desenvolver WS para automatizar as aplicaes ainda representa um desafio [Chung]. importante analisar tecnologias antecessoras aos WebServices (EDI, CORBA, DCOM, RPC e RMI), para concluir se WebServices so realmente menos complexos e de fcil manuteno em relao a estes. De acordo com [Chavda], EDI (Eletronic Data Interchange) de difcil implementao, alm de complexo e caro; CORBA (Common Object Request Broker Architecture) e DCOM (Distributed Component Object Model), alm de competirem entre si, eram difceis de entender, tendo pouco suporte das companias de software; RPC (Remote Procedure Call) ficou muito restrito ao uso dentro do universo Unix e Java RMI (Remote Procedure Call) possui suporte de poucos fornecedores. Como a implementao de WS utiliza padres abertos como XML, para percorrer os resultados, pode-se utilizar tcnicas consagradas como SAX (Simple API for XML), realizando o parser do XML por partes, ou mesmo DOM (Document Object Model), percorrendo o XML de forma hierrquica, possibilitando o controle do XML e mesmo a converso para outros formatos [Hansen]. Tambm advindo do fato da utilizao de padres abertos, o fato de no existir descrio explcita em WS de uma forma de prover segurana na transmisso dos pacotes, poderia ser considerada uma desvantagem de utilizao, mas a mesma pode ser provida por padres abertos e consagrados como chaves pblicas e privadas (SSL) [Vaughan]. Pode-se construir novas aplicaes, provendo interoperabilidade, utilizandose de componentes de aplicaes legadas entregues via WS [Kleijnen]. O futuro est direcionado em tornar pblicos os servios de componentes na organizao e de como estes servios iro se intercomunicar (tecnologicamente e politicamente) [Arsanjani].

4. Mudanas
Para a adoo de WS nas organizaes, so necessrias estruturas que suportem este novo paradigma, uma vez que WS proporcionam sistemas de diferentes plataformas interagindo via XML. Tambm necessrio criar uma cultura organizacional orientada construo de aplicaes fortemente baseadas em componentes em grande escala e os disponibilizar como WS, alm de primar constantemente pela separao dos aspectos, externalizando as partes variveis dos problemas [Arsenjani]. No tocante logstica da engenharia de software, a utilizao de WS, permite que o processo de concepo do software seja geograficamente distribudo e composto por partes de diferentes fornecedores. Alm disso, transforma vrios aspectos de implementao, como processos em lote em elegantes WS [Arsanjani]. Mais do que tudo isso, surge o conceito da empresa provedora de WS pela Web, atravs da venda para seus assinantes [Vaughan]. Assim, seria possvel desenvolver a aplicao atravs de WS que so colados somente no momento da execuo [Chung]. Dessa forma, a utilizao de WS quebra a tradicional separao entre local e global no desenvolvimento de aplicaes [Chung], tranzendo tona aspectos gerenciais como a necessidade de confiana entre as organizaes [Arsanjani]. Tambm necessrio se preocupar com vrias esferas para o sucesso da adoo, desde a organizacional (gerncia de projeto), a metodologia (suportar o desenvolvimento baseado em componentes), a arquitetura (escalabilidade), tecnologia (mapear projeto para tecnologia) e infraestrutura (ferramentas de desenvolvimento e distribuio) [Arsanjani].

5. Ferramentas
Em relao engenharia de software, para o sucesso na adoo em WS, deve-se trazer para etapas iniciais do projeto, preocupaes como coordenao e semntica [Chung]. Para que tudo funcione necessrio simular o mais prximo do real desde o incio, preocupando-se com aspectos de rede e de segurana [Arsanjani]. Em relao aos aspectos gerenciais, a idia de posse de dados e processos ficar mais acentuada (quem responsvel pelas partes e pelo todo) em um ambiente distribudo e de reuso. Tambm se dar maior nfase na ligao dos componentes neste processo de cadeia e em como provr maior velocidade e menor custo, atravs de um processo dinmico [Arsanjani]. WS proporcionaro uma gama de composies de novos WS, muitas vezes de fornecedores diferentes, o que faz com que os projetistas gastem mais tempo 4

PHP5 e Web Services

www.adianti.com.br integrando os WS do que construindo novos. Uma vez que os WS podem estar sob o domnio de terceiros, no h como utilizar os mtodos de engenharia de software tradicionais para compor novos WS, pois estas metodologias so baseadas em controles centralizados e estticos [Arsanjani]. A utilizao de frameworks como .NET, J2EE, dotGNU, Mono, dentre outros, traz vantagens, principalmente em relao funcionalidades de privacidade, segurana, conexo, localizao, sincronizao e o conceito de passaporte para utilizao dos WS, providas atravs de camadas e de tecnologias como LDAP, RDF, UDDI, DHCP, IMAP, POP, JDBC, ODBC, FTP, SMS, NFS, Bind, PPP, dentre outros [Kleijnen]. Sua utilizao tambm ajuda a abstrair o processo de criao, integrao e descoberta dos WS. Comparado com as alternativas anteriores, Web Services representam um mtodo mais simples de se atingir os mesmos resultados. Atravs de ambientes de desenvolvimento integrados (plataformas como Java, .NET, PHP), a criao de um Web Service pode se tornar ainda mais simples pela gerao automtica de cdigo e arquivos necessrios. Ainda mais, desenvolvendo padres para descoberta, descrio e comunicao de mensagens. Em um dos frameworks mais utilizados que provm suporte a Web Services, o .NET, a utilizao de XML, proporciona que mesmo utilizando linguagens diferentes como Cobol ou C#, o WS seja independente de plataforma [Vaughan]. Outro framework muito utilizado, a plataforma SunOne tambm utiliza os padres XML, SOAP, WSDL e UDDI onde os programas so desenvolvidos em Java e entregues por servidores J2EE [Vaughan]. Para demonstrar uma pequena aplicao utilizando Web Services, utilizaremos a linguagem PHP. O PHP usado principalmente como uma linguagem de script server-side embutida em cdigo HTML, sendo uma das linguagens para o desenvolvimento de aplicaes Web mais utilizada no mundo. A popularidade do PHP se deve sua facilidade para criar aplicaes dinmicas para a Web, com suporte maioria dos gerenciadores de bancos de dados existentes, alm de interoperabilidade provida por um grande conjunto de funes e extenses [Dall'Oglio]. Uma das vantagens em se utilizar PHP no ambiente Web so suas capacidades de Orientao a Objetos, classes para parser (SAX e DomXML) e gerao de XML, extenses para XML-RPC e SOAP, alm de bibliotecas para comunicao utilizando protocolos diversos como HTTPS, LDAP, dentre outros. Alm de sua sintaxe ser muito similar a de linguagens como Java e C e o fato de se conseguir implementar Web Services em poucas linhas de cdigo [Alaya]. Para demonstar o funcionamento de WS em PHP, utilizaremos as classes nativas para manipulao do protocolo SOAP, desenvolvido por Dmitry Stogov. Atravs da utilizao de SOAP em PHP, poderamos escrever um cdigo em PHP que envia uma pesquisa (encapsulada em XML pelo SOAP) para uma aplicao de Banco de Dados em C++ localizada em outro continente para obter o preo de um livro, por exemplo [Apple]. O Funcionamento simples, a transao inicia quando a aplicao cliente realiza a chamada remota de uma funo enviando um pacote SOAP contendo a descrio do mtodo a ser invocado via HTTP. O Servidor recebe o pacote SOAP, interpreta-o, executa a funo correspondente e retorna a resposta da execuo tambm encapsulada via SOAP [Apple]. Para demonstrao, construiremos um exemplo de WebServices em PHP para simular a requisio de dados de um cliente. Sendo que os dados esto armazenados em um Banco de dados PostgreSQL ao lado do servidor. Para construir este WebService em PHP, o primeiro passo criar o arquivo WSDL (Web Services Description Language), que ir descrever o funcionamento do Web Service. A seo message descreve processos de requisio (request) e resposta (response) de uma determinada funcionalidade do WebService, que neste caso a funo getNome. Cada processo possui seus parmetros, bem como os tipos de dados. A seo portType define uma funcionalidade do WebService e indica quais processos de requisio e resposta sero utilizados para tal. Neste caso, getNomeRequest para input e getNomeResponse para output. A seo binding define como as mensagens devem ser transmitidas e codificadas. Neste caso, via RPC usando SOAP sobre HTTP. E por fim, a seo service define a URL na qual o servio est rodando. Neste caso, no servidor Apache local. Listagem:exemplo.wsdl
<?xmlversion='1.0'encoding='ISO88591'?> <definitionsname='Exemplo' targetNamespace='http://example.org/Exemplo' xmlns:tns='http://example.org/Exemplo' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns='http://schemas.xmlsoap.org/wsdl/'> <messagename='getNomeRequest'>

5 PHP5 e Web Services

www.adianti.com.br
<partname='codigo'type='xsd:string'/> </message> <messagename='getNomeResponse'> <partname='resultado'type='xsd:string[]'/> </message> <portTypename='ExemploPortType'> <operationname='getNome'> <inputmessage='tns:getNomeRequest'/> <outputmessage='tns:getNomeResponse'/> </operation> </portType> <bindingname='ExemploBinding'type='tns:ExemploPortType'> <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/> <operationname='getNome'> <soap:operationsoapAction='exemplo#getNome'/> <input> <soap:bodyuse='encoded'namespace='exemplo' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/ > </input> <output> <soap:bodyuse='encoded'namespace='exemplo' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/ > </output> </operation> </binding> <servicename='ExemploService'> <portname='ExemploPort'binding='ExemploBinding'> <soap:addresslocation='http://127.0.0.1/servidor.php'/> </port> </service> </definitions>

O Programa servidor, recebe o cdigo de um cliente, consulta seus dados no Banco de dados e retorna todas as informaes em forma de vetor. Caso contrrio, retorna os devidos erros, comentados mais adiante. Listagem:servidor.php
<?php functiongetNome($codigo) { //verificaapassagemdoparmetro if(!$codigo) { thrownewSoapFault('Client','Parametronaopreenchido'); } //conectaaoBancodeDados $id=@pg_connect("dbname=samplesuser=postgres"); if(!$id) thrownewSoapFault("Server","Conexaonao estabelecida"); //realizaconsultaaoBancodeDados $result=pg_query($id,"select*fromclientes". "wherecodigo=$codigo"); $matriz=pg_fetch_all($result); if($matriz==null) thrownewSoapFault("Server","Clientenaoencontrado"); //retornaosdados. return$matriz[0]; } //instanciaservidorSOAP $server=newSoapServer("exemplo.wsdl", array('encoding'=>'ISO88591')); $server>addFunction("getNome"); $server>handle(); ?>

6 PHP5 e Web Services

www.adianti.com.br A seguir, temos o cdigo da aplicao cliente, que estabelece conexo com o servidor da aplicao (servidor.php, listado acima), informa os parmetros da funo remota e exibe os dados de retorno em formato HTML (no Browser). Listagem:cliente.php
<?php //instanciaclienteSOAP $client=newSoapClient("exemplo.wsdl", array('encoding'=>'ISO88591')); try { //realizachamadaremotademtodo $retorno=$client>getNome(3); //Imprimeosdadosderetorno echo'<tableborder=1>'; echo'<trbgcolor=gray><td>Coluna</td><td>contedo </td></tr>'; echo'<tr><td>Cdigo</td><td>'.$retorno['codigo']. '</td></tr>'; echo'<tr><td>Nome</td><td>'.$retorno['nome']. '</td></tr>'; echo'<tr><td>Telefone</td><td>'.$retorno['telefone']. '</td></tr>'; echo'<tr><td>Rua</td><td>'.$retorno['rua']. '</td></tr>'; echo'<tr><td>Idade</td><td>'.$retorno['idade']. '</td></tr>'; echo'</table>'; } catch(SoapFault$excecao)//ocorrnciadeerro { echo"Erro:"; echo"<b>{$excecao>faultstring}</b>"; } ?>

Caso no ocorram erros, ser exibido no Browser, os dados requisitados: Coluna Contedo Cdigo Nome Telefone Rua Idade 3 Pablo Dall'Oglio 55 1234-5678 Rua Conceicao 24

Caso o parmetro do mtodo remoto no seja informato, a mensagem de erro retornada ser a seguinte. Erro: Parametro nao preenchido Caso o Banco de Dados no seja conectado devidamente, a mensagem de erro retornada ser a seguinte: Erro: Conexao nao estabelecida

6. Concluso
Percebemos novos perfis de empresas e profissionais no mercado. Vislumbramos o surgimento de organizaes especializadas em desenvolver WS para um determinado segmento de mercado, podendo desenvolver um servio de qualidade e especfico. As empresas no mais precisaro se preocupar com todo o processo vertical de concepo de aplicaes, e sim em estabelecer parcerias a fim de encontrar os melhores WS para comporem sua aplicao. Mudam as relaes, mudam as culturas organizacionais e muda o processo de concepo de software. Novas oportunidades surgem, lgicas de negcio de aplicaes legadas so preservadas e integradas novos ambientes, novas plataformas de desenvolvimento. Os negcios das organizaes passam a ser melhor compreendidos atravs da separao lgica dos problemas, e ainda mais, quando da utilizao de tcnicas como a de ontologias, combinadas com orientao a objetos para descrever os conceitos e as regras lgicas advindas dos seus relacionamentos.

7 PHP5 e Web Services

www.adianti.com.br

References
Vaughan-Nichols, S. Web Services: Beyound the Hype. Chung, J., Lin, K., Mathieu, R. Web Services Computing: Advancing Software Interoperability. Kleijnen, S., Raju, S. An Open Web Services Architecture. Hansen, R., Santos, C., Crespo, S., Lanius, G., Massen, F.. Web Services: An Architecture Overview. Arsanjani, A., Hailpern, B., Martin, J., Tarr, P. Web Services Promises and Compromises. Fox, G., Pierce, M., Youn, C., Mueller, K., Mock, S., Balsoy, O. Interoperable Web Services for Computational Portals Alaya, D., Browne, C., Chopra, V., Sarang, P., Apshankar, K., McAllister, T. Professional Open Source Web Services. Wrox. Dall'Oglio, P. PHP-GTK, Criando Aplicaes Grficas com PHP. Editora Novatec, 2004. Apple Corporation. Using SOAP with PHP. http://developer.apple.com/internet/webservices/soapphp.html Campbel, S. Web Services with NuSOAP, http://www.zend.com/zend/tut/tutorial-campbell.php, September, 2002.

Sobre o Autor Nome E-mail Pablo Dall'Oglio pablo@dalloglio.net

Pablo Dall'Oglio bacharel em Informtica pela UNISINOS. Autor dos projetos em software livre Agata Report e Tulip, alm dos livros "PHP Programando com Orientao a Objetos" e "PHPGTK Criando Aplicaes Grficas com PHP", pela editora Novatec. Mantenedor da comunidade brasileira de PHP-GTK. Atualmente, diretor de tecnologia e proprietrio da Adianti Solutions (www.adianti.com.br).

8 PHP5 e Web Services