Hoje vou falar de algo que HOJE é pouco documentado, pouco explicado e MUITO utilizado, vou falar sobre como utilizar web service no ZEND FRAMEWORK, nesse caso SOAP.
Mas O PV me explica ai, o que é um web service? E esse tal de SOAP?
Se você não conhece e preferiu questionar eu fico muito feliz pois a dúvida é o principio da sabedoria e precisamos questionar para aprender. Afinal, ninguém nasceu sabendo.
Um web service é uma maneira de uma aplicação comunicar com um servidor Web. Tradicionalmente, quem interage com um servidor web é um ser humano, através de um browser. Se trocarmos o ser humano por uma aplicação, a interacção passa a ser por webservices.
Podem-se implementar webservices de várias maneiras. Duas delas ganharam notoriedade, por diferentes razões: SOAP e REST
SOAP(que é a que vou explicar aqui nesse artigo) é pegar numa mensagem xml, metê-la num envelope e enviá-la por HTTP (embora o SOAP permita diferentes protocolos de transporte, na prática é HTTP). A resposta vem igualmente num envelope, em xml.
REST é usar o HTTP como ele foi concebido, com GET, POST, PUT e DELETE (estes últimos dois quase não são utilizados mas estão na especificação desde o início). Ou seja, se sabem fazer submit de forms, sabem usar REST. A diferença é que o submit de um form devolve uma página em html, e um webservice REST devolve uma página em Xml
Acho que nem preciso falar qual é o mais seguro não é? Por isso é nele que vamos "MARTELAR".
Ta legal, e como implementar isso no ZEND FRAMEWORK?
Vou utilizar como exemplo aquele Quick Start que a zend disponibiliza em seu site então faça um download la mesmo blz?
Ele já vem com 3 controllers configurados ok? Index, Error e GuestbookController... vamos apenas utilizar o IndexController pois é ai que vamos escrever nosso webservice cliente(aquele que consome) e o server(aquele que libera).
- <?php
- /* Carregando a classe que nosso server vai consumir */
- require_once realpath(APPLICATION_PATH .'/../library/').'/Calculadora.php';
- class IndexController extends Zend_Controller_Action {
- public function init() {
- /* Initialize action controller here */
- }
- public function indexAction() {
- }
- public function soapserverAction() {
- if (isset($_GET['wsdl'])) {
- /*
- * Usar o Soap AutoDiscover para criacao do WSDL de forma dinamica
- */
- $autodiscover = new Zend_Soap_AutoDiscover();
- $autodiscover->setClass('Calculadora');
- $autodiscover->handle();
- } else {
- // Disponibilizar o webservice atraves do canal:
- $soap = new Zend_Soap_Server("http://start.local/index/soapserver?wsdl");
- $soap->setClass('Calculadora');
- $soap->handle();
- }
- exit;
- }
- public function soapclienteAction() {
- /* canal de chamada para webservice */
- $soap = new Zend_Soap_Client("http://start.local/index/soapserver?wsdl");
- echo $soap->soma(11, 2) . PHP_EOL; // imprime 3
- echo $soap->subtrai(11, 2) . PHP_EOL; //imprime 9
- exit;
- }
- }
Agora a classe "Calculadora que nosso webservice irá consumir
- <?php
/* - * Classe calculadora
- */
- class Calculadora {
- /**
- * Realiza Soma
- * @param integer $a
- * @param integer $b
- * @return integer
- */
- public function soma($a, $b) {
- return $a + $b;
- }
- /**
- * Realiza Subtracao
- * @param integer $a
- * @param integer $b
- * @return integer
- */
- public function subtrai($a, $b) {
- return $a - $b;
- }
- /**
- * Concatena
- * @param string $a
- * @param string $b
- * @return string
- */
- public function concatena($a, $b) {
- return $a ." concatenado com". $b;
- }
- }
Veja que no indexcontroller criamos a action soapcliente e soapserver isso pq é um teste então o cliente e o servidor vão estar no mesmo lugar. O WSDL que vamos carregar é o do link do nosso servidor: http://start.local/index/soapserver?wsdl (onde start.local vc substitue pelo link do seu localhost e/ou site em que isso irá rodar).
Para testar vc acessa o seu WSDL http://start.local/index/soapserver?wsdl e se ele retornar um XML é com a descrição da sua classe Calculadora ele esta pronto para ser utilizado então para isso esse a action cliente e faça o teste: http://start.local/index/soapcliente
Para finalizar vou explicar o que é esse carinha ai WSDL que significa Web Services Description Language e é uma linguagem baseada em XML utilizada para descrever Web Services funcionando como um contrato do serviço. Trata-se de um documento escrito em XML que além de descrever o serviço, especifica como acessá-lo e quais as operações ou métodos disponíveis.
Imagine que são as regras para trabalhar com o webservice e como assim qualquer desenvolvedor de qualquer tecnologia consegue trabalhar com isso.
Vou disponibilizar um webservice SERVER na WEB para testes o WSDL será:
http://www.profpv.com/index/soapserver?wsdl
Assim todo mundo pode testar, inclusive o método que trabalha com STRING.
Valeu e até a próxima
Valeu e até a próxima
PV esse é o primeiro artigo sobre webservice no zend framework que funciona aqui! rsrs
ResponderExcluirValeu meu caro! Vc é fóda!
Parabéns pelo artigo, muito simples, mas explica bem a funcionalidade.
ResponderExcluirEste comentário foi removido por um administrador do blog.
ResponderExcluirOlá!
ResponderExcluirO soapserver?wsdl funcionou certim aqui.
Agora o soapcliente não. Dá:
Zend_Soap_Client_Exception: SOAP extension is not loaded.
Errors
Notice: Use of undefined constant SOAP_1_2 - assumed 'SOAP_1_2' in C:\wamp\www\webservicepontual\application\controllers\IndexController.php on line 36