0

WebService com Zend Framework

criado por Paulo Victor Gomes em 18/07/2012 4:03pm
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


Link original: http://profpv.blogspot.com.br/2012/03/webservice-com-zend-framework.html

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)