Você está na página 1de 7

Seo DELPHI

Seo EASY DELPHI

Seo PHP

Nesta seo voc encontra artigos para iniciantes na linguagem Delphi

Consumindo Web Services


Aprenda como utilizar na prtica recursos de um Web Services e como tirar proveito deles

Maikel Marcelo Scheid


(maikelscheid@gmail.com)

tcnico em Informtica com nfase em Anlise e Programao de Sistemas. Atua na rea de Desenvolvimento de Softwares em Delphi para plataforma Win32 e .NET com banco de dados Firebird e MS SQL. membro da Equipe Editorial ClubeDelphi.

Edinei Daniel Steffen


(edineidaniel@gmail.com)

tcnico e Bacharelando em Sistemas de Informao, Analista e Desenvolvedor de Sistemas. Atua na rea de Desenvolvimento de Softwares em Delphi para plataforma Win32 e .NET com banco de dados Firebird e MS SQL.

om o advento da Internet e seu rpido avano tanto na parte tecnolgica quanto em servios, cada vez mais existe a necessidade de compartilhamento de informaes. Servios estes que podem ser responsveis por um simples clculo, uma simples consulta ou at mesmo uma avanada transao de produtos entre empresas, necessitando apenas de um Web Service, ou seja, uma aplicao que funcione com a utilizao de um servio pblico na internet ou na rede local. Lembrando que Web Service no traz consigo o conceito de aplicaes com interfaces grficas para usurios, mas sim servios que so acessados e disponibilizados em uma linguagem universal XML(Extensible Markup Language), ou linguagem de marcao, possibilitando com isso uma comunicao padronizada em um nico modelo (XML). Comunicao esta que normalmente feita atravs do protocolo HTTP (Hypertext

Transfer Protocol Protocolo de Transferncia de Hipertexto), fazendo com que sistemas de diferentes linguagens e plataformas troquem dados entre si. Um termo bastante comentado no mundo dos analistas, desenvolvedores e arquitetos de software, mas pouco posto em prtica devido falta de entendimento da prtica de utilizao do mesmo. Veremos neste artigo que a implementao desta tecnologia utilizando o Delphi 7. Para tanto faremos o uso e descrio dos servios de envio de e-mails, conversor de temperaturas e o servio de consulta de CEP e cidades e a partir destes desenvolveremos as conexes e posteriormente faremos a utilizao dos mesmos.
Nota: A criao e utilizao de Web Services est disponvel no Delphi a partir da verso 6.0 e hoje encontramos em todas as verses disponveis incluindo RAD Studio 2007.

48 ClubeDelphi - Consumindo Web Services

Clube95.indb 48

09.05.08 16:27:18

EASy DELPh I

Nota: O escopo deste artigo tem como finalidade mostrar apenas como consumir, ou seja, utilizar Web Services j disponveis no mercado. Est fora do escopo mostrar como criar WS.

Depois de pronta, o atendente traz a papelada para voc usufruir do dinheiro (SOAP de resposta); , basicamente, assim que funcionam os Web Services.

www.devmedia.com.br/clubedelphi/portal.asp

Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma vdeo aula de Guinther Pauli que mostra como trabalhar Web Services e SOAP. http://www.devmedia.com.br/articles/viewcomp.asp?comp=6733&hl=

Devido a essa tecnologia trabalhar com a transferncia de dados atravs do protocolo HTTP, no existe motivo algum para pensar que esses dados estaro expostos na Internet, pois os mesmos permanecem encapsulados pelo protocolo SOAP (Simple Object Access Protocol), fazendo com que assim exista um isolamento entre o servio e o banco de dados. Assim sendo, para existir uma comunicao com qualquer WebService necessrio uma implementao do protocolo SOAP determinado no W3C (rgo que desenvolve padres para a criao e a interpretao dos contedos para a Web). Antes de partirmos para a prtica em si, necessitamos de alguns esclarecimentos sobre os termos que sero envolvidos durante a utilizao de um Web Services: WSDL (Web Services Description Language), definida como sendo a linguagem de um WebService, baseado em XML, contendo os mtodos, operaes e o modo de como acess-lo; UDDI (Universal Description, Discovery and Integration), uma especificao que define um servio de Web Services, nesta contm informaes sobre provedores, implementaes e servios;

Desmistificando a tecnologia

Iremos utilizar para este artigo a verso do Delphi 7 em uma aplicao Win32, mas fique vontade para o uso de qualquer outra verso superior para dar incio implementao Web Services em seus sistemas.

Fazendo o uso dos Servios

www.devmedia.com.br/clubedelphi/portal.asp

Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma vdeo aula de Guinther Pauli que mostra como trabalhar Web Services e SOAP. http://www.devmedia.com.br/articles/viewcomp.asp?comp=6771&hl=

Analogia para o Uso

Vamos pensar de uma forma diferente para representar a utilizao de um WebService. Imagine-se necessitando de dinheiro; Voc procura na sua cidade (UDDI) o melhor banco; No banco voc escolhe uma linha de crdito (WSDL); Em seguida, voc faz o pedido ao atendente (SOAP), que leva o pedido at a gerncia (HTTP"); O gerente prepara a anlise de crdito para sua escolha (Classe que implementa o servio);

No menu File|New>Application crie uma nova aplicao, altere a propriedade Name do formulrio inicial para frmWSEmail e a propriedade Caption para Web Service 01: Envio de Email. Salve a Unit principal do projeto como uWSEmail.pas e o projeto salve como prjWSEmail.dpr. Em seguida vamos montagem do layout do formulrio, adicione um Label no formulrio com sua propriedade Caption para Nome do Remetente. Ao lado do Label adicione um Edit (edtNomeRem) e limpe a propriedade Text. Abaixo adicione uma nova Label e em sua propriedade Caption configure para E-mail do Remetente e ao lado acrescente um Edit(edtEmailRem). Aps isso adicione um Label no formulrio com sua propriedade Caption igual a Nome do Destinatrio. Da mesma forma ao lado da Label adicione um Edit (edtNomeDes) e limpe a propriedade Text. Abaixo adicione uma nova Label e em sua propriedade Caption altere para E-mail do Destinatrio acrescentando ao seu lado um Edit(edtEmailDes). Necessitando ainda um campo onde o usurio informa o assunto seguindo o mesmo modelo dos demais campos utilizando um Label e um Edit(edtAssunto). E por fim, utilizaremos um componente Memo onde ser possvel o usurio digitar a mensagem do e-mail, portanto adicione um componente Memo(memMensagem). Adicione tambm um boto que ser responsvel por acionar o Web Services (Figura 1). Agora deve ser importado no projeto o WSDL(Web Services) que disponibiliza o servio de envio de e-mail,

Exemplo 01: Envio de E-mails

Nota do DevMan
Segundo o verbete pt.wikipedia.org/wiki/Soap: SOAP (originado do acrnimo ingls Simple Object Access Protocol) um protocolo para troca de informaes estruturadas em uma plataforma descentralizada e distribuda, utilizando tecnologias baseadas em XML. Sua especificao define um framework que prov maneiras para se construir mensagens que podem trafegar atravs de diversos protocolos e que foi especificado de forma a ser independente de qualquer modelo de programao ou outra implementao especfica. Por no se tratar de um protocolo de acesso a objetos, o acrnimo no mais utilizado. Geralmente servidores SOAP so implementados utilizando-se servidores HTTP, embora isto no seja uma restrio para funcionamento do protocolo. As mensagens SOAP so documentos XML que aderem a uma especificao fornecida pelo rgo W3C (rgo que regulamenta e cria padres de internet). O primeiro esforo do desenvolvimento do SOAP foi implementar RPCs sobre XML. Nota: A Chamada de procedimento remoto ou RPC (Remote Procedure Call) o tipo de protocolo para chamada remota de procedimentos em qualquer lugar da rede ou uma chamada de funo para o mtodo de transferncia de controle de parte de um processo para outro, permite a diviso de um software em vrias partes, compartilhamento de arquivos e diretrios. O protocolo RPC pode ser implementado sobre diferentes protocolos de transporte, o RPC no especifica como a mensagem enviada, somente especifica e interpreta. As camadas de transporte que o RPC implementa so a TCP e a UDP. RPC e Sockets tm a funo de implementar numa aplicao as funes de rede, mas fazem isto de maneiras diferentes. Definio Envelope das mensagens, regras de codificao, conveno RPC, ligao com protocolos subjacentes. O SOAP oferece * Mecanismo para definir a unidade de comunicao; * Mecanismo para lidar com erros; * Mecanismo de extenso que permite evoluo; * Mecanismo entre as mensagens SOAP e o HTTP, representar tipos de dados em XML;

Edio 95 - ClubeDelphi 49

Clube95.indb 49

09.05.08 16:27:19

Figura 1. Layout do Formulrio

o link deste servio www.abysal.com/ soap/AbysalEmail.wsdl. Se digitar esse endereo no browser, notar que ele lhe retornar uma pgina semelhante Figura 2. Esse retorno nada mais do que o arquivo XML com as configuraes do Web Services. A importao do WSDL no Delphi extremamente simples, basta ir at o menu File|New>Other>Web Services>WSDL Importer (Figura 3). Ao confirmar a caixa de dilogo, o Delphi abrir outra janela onde preciso informar o link do WSDL (Figura 4). Na ltima tela do assistente j teremos uma pr-visualizao dos mtodos que compem a interface do Web Services. Clicando no boto Finish o Delphi criar uma Unit com os mtodos de acesso e interao com o servio, e neste momento j possvel salvar, na mesma pasta do projeto, esta nova unit, com o nome sugerido pelo Delphi. Basta agora utilizar o servio, mas para isso necessitamos de um componente HTTPRIO, que o componente responsvel por transformar chamadas a mtodos de interface, escritas em Pascal, em requisies SOAP. Em seguida, configurar sua propriedade Url, com o endereo do servio, conforme ilustrado na Figura 4. Por isso inclua o compo-

Figura 2. WSDL do Web Service

Figura 3. Opo do WSDL Importer

50 ClubeDelphi - Consumindo Web Services

Clube95.indb 50

09.05.08 16:27:21

EASy DELPh I

Figura 4. Assistente de importao do WSDL

nente indicado e digite o link do Web Service na propriedade mencionada anteriormente. O componente pode ser encontrado na paleta de componentes WebServices. Aps a configurao do componente HTTPRIO, vamos relacionar a Unit do formulrio com a Unit criada h pouco pelo Delphi (Figura 5), pressionando as teclas ALT + F11 e selecionar a Unit que contm os mtodos. Agora podemos passar para a parte de codificao e utilizao dos mtodos que so disponibilizados pelo Web Service. A codificao se dar no evento OnClick do boto Enviar onde dever digitar o cdigo da Listagem 1, que far a chamada ao servio da Web importado, passando os valores requisitados para a funo encapsulada no servio, enviando assim o e-mail e retornando uma mensagem ao usurio (Figura 6).
Nota: A palavra SendEmailPortType , apresentada no cdigo da Listagem 1 diz respeito ao nome da interface do servio e no ao nome da Unit ao qual os mtodos foram disponibilizados.

Este exemplo tratar da implementao de um Web Service bem simples, cujo objeto converter uma temperatura dada

Exemplo 02: Transformao de Temperaturas

Figura 5. Unit gerada

Listagem 1. Envio de e-mail utilizando Web Service


procedure TfrmWSEmail.bbtnEnviarClick(Sender: TObject); begin try (HTTPRIO1 as SendEmailPortType).SendEmail (edtNomeRem.Text, edtEmailRem.Text, edtNomeDes.Text, edtEmailDes.Text, edtAssunto.Text, memMensagem.Lines.Text, , ); ShowMessage(E-mail enviado com Sucesso!); except ShowMessage(Problemas na conexo, com o servio de envio de E-mail); end; end;

Figura 6. Resultado da implementao do Web Service no Projeto

Edio 95 - ClubeDelphi 51

Clube95.indb 51

09.05.08 16:27:22

em graus Celsius para uma temperatura na escala Fahrenheit e vice-versa. Iniciando um novo projeto, no menu File|New>Application crie uma nova aplicao, altere a propriedade Name do formulrio inicial para frmWSConverteTemp e a propriedade Caption para Web Service 02: Converso de Temparaturas (CtoF, FtoC). Salve a unit principal do projeto como uWSConverte

Temp.pas e o projeto salve como prjWSConverteTemp.dpr. Para o layout do formulrio, utilizaremos primeiramente um componente RadioGroup(rgConfigTemp), que ser responsvel pela configurao do tipo de converso que se deseja realizar. Na propriedade Caption ser descrito com Tipo de Converses, na propriedade Items sero adicionadas duas

Listagem 2. Cdigo de utilizao do Web Services para converso de temperatura


case rgConfigTemp.ItemIndex of 0 : lblResultado.Caption := IntToStr((HTTPRIO1 as ITempConverter ). CtoF(StrToInt(edtTemp.Text))); 1 : lblResultado.Caption := IntToStr((HTTPRIO1 as ITempConverter ). FtoC(StrToInt(edtTemp.Text))); end;

Listagem 3. Implementao da mudana de formulrio de acordo com a pesquisa


procedure TfrmWSCEP.rgTipoConsultaClick(Sender: TObject); begin case rgTipoConsulta.ItemIndex of 0: begin { Mostra o componente Panel com os campos na tela } pnlParametros.Visible := False; { Monta a descrio do campo principal de consulta } lblCepDescricao.Caption := Informe o CEP; end; 1: begin { Oculta o componente Panel com os campos na tela } pnlParametros.Visible := True; { Monta a descrio do campo principal de consulta } lblCepDescricao.Caption := Informe a parte da descrio do Lograd.:; end; end; end;

linhas. A primeira com a frase Celsius para Fahrenheit e na segunda linha Fahren heit para Celsius. E para uma das alternativas ficar marcada ser informado o nmero 0 (zero) na propriedade ItemIndex. Ainda ser necessrio um Label com sua propriedade Caption alterado para Informe a Temperatura, logo abaixo da Label um componente Edit(edtTemp), para que o usurio possa informar o valor da temperatura a ser convertida e limpe a propriedade Text. Para mostrar o resultado da converso ser utilizado um componente Label (lblResultado) e para finalizar a parte de layout ser adicionado um Button que ser responsvel por executar os comandos de interao com Web Service (Figura 7). Repita o processo que realizamos no exemplo anterior para importar o WSDL de converso, ou seja, acessando o menu File|New>Other>Web Services>WSDL Importer e digitando o endereo developerdays.com/cgi-bin/ tempconverter.exe/wsdl/ITempConverter. Feita a importao, inclua um componente HTTPRIO e informe a Url do servio. No devemos esquecer de salvar a Unit criada pelo delphi a partir da importao do WSDL. O nome da Unit pode seguir com o nome que o Delphi sugere. No evento OnClick do boto Buscar, faremos o uso do cdigo da Listagem 2, sem antes esquecer de relacionar as Units (ALT + F11). Aps o cdigo implementado obtm-se o resultado, conforme ilustrado na Figura 8.

Figura 7. Layout do Formulrio.

Figura 8. Resultado Final, aps a implementao do Web Service

Este exemplo tratar da implementao de um Web Services, cujo objetivo retornar uma descrio completa de um ou vrios logradouros, dependendo da forma que vo ser informados os parmetros para servio. Este Web Service foi encontrado na Internet, portanto no sei informar, por quanto tempo os dados estaro disponveis, mas segundo a documentao, este servio dispe de praticamente todas as cidades/logradouros do pas. O servio disponibiliza dois mtodos para

Exemplo 03: Consulta de CEP e Logradouros

52 ClubeDelphi - Consumindo Web Services

Clube95.indb 52

09.05.08 16:27:23

EASy DELPh I

realizar a consulta, um onde somente necessrio informar o CEP retornando o Logradouro, Cidade e UF e outro onde possvel realizar um busca aproximada pela descrio do logradouro, retornando todos os registros que se encaixam neste tipo de filtro. Novamente iniciaremos um novo projeto no menu File|New>Application e altere a propriedade Name do formulrio inicial para frmWSCep e a propriedade Caption para Web Service 03: Consulta de CEP e Cidades. Salve a unit principal do projeto como uWSCep.pas e o projeto salve como prjWSCep.dpr. Vamos para a montagem do layout do formulrio que ir interagir com o Web Service. Colocaremos os seguintes componentes em tela, um R a di o G o u p ( r gTip o C o n s u lt a) e na sua propriedade Items adicione dois itens (Por CEP, Por Descrio de Logradouro). Abaixo deste componente, ad ic ion a remo s u ma Label(lblCepDescricao) com o Caption Informe o CEP. Adicionaremos abaixo da Label um componente Edit (edtCepDescricao). Utilizaremos uma Panel(pnlParametros), sua propriedade Visible ficar como False e dentro desta Panel ser adicionado mais quatro componentes, dois Edit`s, um sendo identificado por edtUF e ao seu lado uma Label com a descrio do campo, e o outro Edit(edtNroReg), c om u m a L abel ao s e u lado pa ra identificao. Ser adicionado um BitBtn(bbtnBuscar) e por fim um componente Memo(memResultado) levando tambm ao seu lado uma Label para descrever a finalidade do campo conforme layout apresentado na Figura 9. O componente Panel ser exibido conforme a opo de consulta selecionada. No evento OnClick do rgTipoConsulta implemente o cdigo da Listagem 3 que se encontra comentado de acordo com a ao a ser codificada. Em seg u ida podemos rea l i za r a i mpor t a o do WSDL do s er v io para nossa aplicao, seguindo os mesmos passos dos dois exemplos anteriores. Dessa vez basta usar a url desenvolvimento.setrem.com.br/ws-

CEP/wsCEP.exe/wsdl/ICEP. No menu File|New>Other>Web Services>WSDL Importer informe o link mencionado referente ao servio, seguindo os passos at finalizar o assistente. Aps a importao do servio salve a Unit na mesma pasta do projeto. Agora vamos adicionar um componente HTTPRIO para realizar a interao com os mtodos do servio, e em sua propriedade URL inclua o link indicado.
Nota: De onde vem o link para preencher a propriedade Url do componente HTTPRIO? Pois bem, a Unit gerada a partir do WSDL Importer existe uma nica funo implementada que responsvel por realizar a comunicao

com o Web Services. E nessa funo que existe uma varivel identificando a Url que o componente necessita, nesse caso: desenvolvimento.setrem.com.br/ weCEP/wecCEP.exe/soap/ICEP.

Aps feita esta configurao o Web Service est pronto para ser consumido, portanto, necessitamos relacionar as Unit`s (ALT + F11) e no evento OnClick do boto Buscar adicionaremos o cdigo da Listagem 4. Como podemos ver, o cdigo segue os mesmos padres de codificao dos exemplos anteriores. Passamos para o WS os parmetros necessrios e ele nos retorna o CEP encontrado. O resultado demonstrado atravs das Figuras 10 e 11.

Edio 95 - ClubeDelphi 53

Clube95.indb 53

09.05.08 16:27:25

Listagem 4. Cdigo de requisio do CEP


case rgTipoConsulta.ItemIndex of 0: memResultado.Lines.Text := (HTTPRIO1 as ICEP).LogradourosPorCep( edtCepDescricao.Text); 1: memResultado.Lines.Text := (HTTPRIO1 as ICEP). LogradourosPorNome(edtCepDescricao.Text, edtUF.Text, edtNroReg.Text); end;

Da mesma forma demonstrado o resultado, se utilizada a opo Por Descrio de Logradouro, conforme ilustrado na Figura 11. Com estes exemplos podemos ter uma boa noo dos recursos que a utilizao de Web Services nos oferece. Inmeras so as possibilidades de implementaes em termos de desenvolvimento de software.

Figura 9. Layout do Formulrio, aps o desenho do mesmo

Foram abordados neste artigo os principais conceitos sobre a Web Services, juntamente com exemplos prticos sobre a utilizao destes servios, demonstrando a facilidade de se trabalhar com esse tipo de tecnologia. Utilizamos padres abertos como HTTP, SOAP, UDDI, ao invs de tecnologias proprietrias, e tudo isso ainda baseado em um padro universal de comunicao entre sistemas, o XML. Agora cabe a voc, analisar o emprego desta tecnologia em seu cotidiano, e aplicar, com base nas funcionalidades apresentadas neste artigo, mais recursos em suas aplicaes. Explore mais esta rea, busque mais, leia mais, aprenda mais, pois o emaranhado de opes que existem nesse tipo de servio muito grande. Em uma prxima oportunidade veremos aqui na Easy Delphi como implementar aplicaes servidoras. Um grande abrao e at o prximo artigo.

Concluso

Figura 10. Demonstrao da Consulta por CEP

D seu voto sobre este artigo, atravs do link: www.devmedia.com.br/clubedelphi/feedback

Figura 11. Demonstrao da Consulta por Descrio do Logradouro

54 ClubeDelphi - Consumindo Web Services

Clube95.indb 54

edio ta

A Clubedelphi tem que ser feita ao seu gosto. Para isso, precisamos saber o que voc, leitor, acha da revista!

D s

D seu feedback sobre esta edio!

Feedback eu
sobre e s

09.05.08 16:27:27