Beruflich Dokumente
Kultur Dokumente
Nesse incio, ns simplesmente inclumos o arquivo principal do mdulo NuSoap, instanciamos a varivel $server como um objeto soap_server e inicializamos o suporte ao WSDL, batizando o nosso servio com o namespace server.triangle nas linhas 6 e 7. A diretiva urn: indica que estamos utilizando um identificador de recurso ao invs de um caminho, como ocorre em URL's ou URI's. Na listagem abaixo, registramos a funo de nosso Web Service utilizando o mtodo register,
Agora, escreveremos a funo de nosso Web Service, ou seja, implementaremos o mtodo registrado acima, recebendo os parmetros indicados e retornando o valor esperado.
Antes de iniciarmos nossos trabalhos com o NCL/Lua, podemos testar o funcionamento do nosso Web Service atravs de um cliente PHP. Para tanto, basta executar o script PHP listado abaixo, lembrando que localhost se refere mquina local e pode ser substitudo por um ip ou um domnio, conforme o ambiente onde est hospedado o nosso servio.
Caso haja interesse em acessar o WSDL do nosso Web Service, basta acessar a url do arquivo principal em adio do parmetro ?wsdl. Por exemplo, se a aplicao estiver rodando na mquina local, conseguiremos visualizar o WSDL no navegador atravs do endereo http://localhost/mywebservice/server.php?wsdl.
Agora, criaremos uma Table Lua contendo as informaes necessrias para a criao da requisio ao Web Service. Tais informaes so: Endereo do arquivo principal do Web Service; o namespace do servio, anteriormente escolhido (sem o urn:); o nome do mtodo e os parmetros do mesmo.
Julgo importante ressaltar um fato interessante com relao aos parmetros em nossa Table Lua. Um Web Service PHP baseado em NuSoap no considera o nome dos parmetros, somente a ordem em que eles aparecem no xml de requisio. No nosso exemplo, com a Table Lua considerada, o mdulo NCLua soap ir gerar um xml de requisio contendo o seguinte fragmento, referente aos parmetros a serem passados para a funo do servio:
Apesar de nosso Web Service ter sido registrado com os parmetros de nomes a, b e c, o mesmo comportamento ser evidenciado se o fragmento acima for substitudo por:
Isso ocorre porque, conforme dito antes, o NuSoap simplesmente joga o valor da primeira tag de parmetros no primeiro argumento do mtodo de servio, e assim por diante. O mdulo NCLua SOAP, por sua vez, ao gerar o xml de requisio, escreve as tags de parmetros em ordem arbitrria. Poderia acontecer, por exemplo, de o fragmento xml mostrado acima ter sido gerado da seguinte forma:
Quando o NuSoap fosse executar o trabalho de interpretao da requisio, a nossa funo seria chamada da seguinte maneira: triangle(4, 5, 3); Ou seja, se no nosso caso a ordem em que os lados do tringulo aparecessem na funo importasse , ocorreria um resultado inesperado (para o nosso Web Service a ordem no importar, pois dentro do mtodo triangle os lados so postos em ordem crescente de medida). Portando, para evitar maiores problemas, aconselho sempre a se conhecer a ordem em que aparecem os argumentos da funo de servio e, ao se gerar a Table Lua de requisio, especific-los respectivamente da seguinte forma:
Como cada elemento da tabela params no possui identificador explcito, ou seja, os seus elementos so sub-tabelas sem nome, o mesmo passa a ter o formato de um array. Deste modo, seus elementos so associados biunivocamente com ndices numricos, garantindo assim que a ordem de declarao dos parmetros seja respeitada no momento de montagem do xml de requisio por parte do mdulo NCLua SOAP. Voltando ao nosso main.lua, aps especificarmos o Table Lua de requisio, implementaremos a funo que ir receber e tratar a resposta obtida do Web Service. Esta funo obrigatoriamente deve receber um parmetro referente resposta a ser obtida do Web Service.
Finalmente, chamamos o mtodo call do mdulo NCLua SOAP, passando como argumentos o Table Lua de requisio, o nome da funo de retorno que acabamos de criar e a verso do SOAP utilizada pelo Web Service, que no caso do NuSoap ser 1.1.
Concluso
Por aqui, terminamos mais um tutorial sobre aplicaes em Tv Digital, desta vez buscando mostrar um pouco sobre o funcionamento da comunicao entre um Web Service PHP e uma aplicao NCL/Lua. Espero que, de modo geral, o que foi exposto aqui tenha sido proveitoso, uma vez que Web Services se mostram bastante adequados para fornecer informaes s mais variadas plataformas, podendo constituir uma ferramenta de interatividade poderosssima nas mais diversas aplicaes de Tv Digital. E esse recurso, quando somado s vantagens oferecidas pela tecnologia PHP, torna-se um instrumento gratuito e de fcil manuseio, que atende desde as aplicaes mais simples at as mais engenhosas.
Links
Mdulo NuSoap PHP: http://sourceforge.net/projects/nusoap/ WampServer 1.7.4: http://www.soft-go.com/view/WAMP5_20010.html Cdigo Fonte Web Service PHP (Inclui a NuSoap 0.9.5) http://www.ufjf.br/lapic/files/2010/05/mywebservice.zip Cdigo Fonte Cliente NCLua SOAP (Inclui mdulo NCLua SOAP 0.5.6 e dependncias) http://www.ufjf.br/lapic/files/2010/05/client-triangle.zip
Fontes
http://www.scottnichol.com/nusoapintro.htm http://www.scottnichol.com/nusoapprogwsdl.htm http://ncluasoap.manoelcampos.com Outros Projetos Interessantes em TV Digital (por Manoel Campos) http://enquetetvd.manoelcampos.com http://ncluatweet.manoelcampos.com http://ncluarss.manoelcampos.com
Johnny Moreira Gomes Aluno do curso de Cincias Exatas da Universidade Federal de Juiz de Fora (UFJF) e Bolsista do Grupo de Tv Digital do Laboratrio de Aplicaes e Inovao em Computao (LApIC) da UFJF