Webservices SOAP com Zend Framework 2

Posted on maio 18, 2013. Filed under: PHP, Zend Framework | Tags:, , , , |

Introdução

Neste artigo vamos aprender como criar webservices SOAP com Zend Framework 2. Em artigo anterior, Webservices com Zend Framework parte I, vimos como trabalhar com Webservices SOAP no Zend Framework I. Portanto, este artigo serve com uma atualização do anterior.

O exemplo demonstrado neste artigo utiliza o Zend Framework 2 de forma Standalone, ou seja, de forma independente da estrutura do MVC.

Preparação

Para preparar o ambiente para o Webservice com o Zend Framework 2 de forma Standalone, iremos realizar dois processos: 1) Baixar e descompactar o pacote do Zend Framework. 2) Configurar o autoload do php para que seja possível incluir automaticamente as bibliotecas do Zend Framework necessárias para nosso objetivo.

  1. Baixando e descompactando o Zend Framework
  2. Acesse o link abaixo e faça o download do pacote Zend Framework 2.x.x Minimal:

    http://framework.zend.com/downloads/latest
    PS: Não há necessidade de baixar o pacote pelo site da Zend. Pode baixar pelo link direto. (.tar.gz ou .zip)

    Descompacte o pacote dentro do diretório onde irá criar seu webservice SOAP (server ou client) e faça um link (ou copie) o diretório library/Zend para o diretório corrente. Veja exemplo de como fazer no Linux:

    $ tar zxpf ZendFramework-minimal-2.x.x.tgz
    $ ln -s ./ZendFramework-minimal-2.x.x/library/Zend
    

    PS: Outra opção é colocar o caminho completo para o diretório ZendFramework-minimal-2.x.x/library/Zend dentro do include path do php

  3. Configurando o autoload
  4. É necessário registrarmos no autoload do PHP a lógica para que nosso script possa incluir automaticamente todas as libs do Zend Framework necessárias. Esse procedimento irá nos poupar o trabalho de ter que incluir manualmente todos os arquivos necessários, que é uma opção muito custosa.

    Crie um arquivo chamado autoload-zend.php, com o seguinte conteúdo:

    <?php
    // auto load compativel com zend framework
    spl_autoload_register(function ($className) {
    
          // We assume classes with underscores are Zend Framework pseudo namespaced classes
          if (strpos($className, '_' ) !== FALSE) {
                $className = str_replace('_', '/', $className );
          }
    
          // This line provides real php 5.3 namespace support
          $file = str_replace('\\', '/', $className . '.php');
    
          // search include path for the file.
          $include_dirs = explode(PATH_SEPARATOR, get_include_path());
    
          foreach($include_dirs as $dir) {
            $full_file = $dir . '/'. $file;
    
            if (file_exists($full_file)) {
                require_once $full_file;
                return true;
            }
          }
    
          return false;
    });
    
  5. Criando o Webservice SOAP
  6. Para criar nosso Webservice SOAP, vamos utilizar a classe Zend\Soap\Server e Zend\Soap\AutoDiscover. A classe Zend\Soap\AutoDiscover será utilizada para geração automática do WSDL necessário para a comunicação do protocolo SOAP. É possível trabalhar no PHP no modo non-WSDL, sem a utilização do WSDL. Porém é uma pratica não aconselhada, pois a maioria dos Webservices SOAP em outras linguagens não permite o modo non-WSDL. A classe Zend\Soap\Server é responsável por gerenciar o Webservice em si.

    Segue abaixo o código do Webservice SOAP de exemplo (Server):
    No nosso exemplo, o webservice estará servindo a funcionalidade de um calculadora básica: soma e subtração

    Arquivo soap-server.php

    <?php
    // incluir o autoload para o zf2
    require_once("autoload-zend.php");
    
    if (isset($_GET['wsdl'])) {
            // geracao automatica do WSDL
            $autodiscover = new Zend\Soap\AutoDiscover();
            $autodiscover->setUri('http://127.0.0.1/services/soap-server.php');
    
            // servindo a classe Calculadora
            $autodiscover->setClass('Calculadora');
            $autodiscover->handle();
    } else {
            // instancia do Soao Server
            $soap = new Zend\Soap\Server("http://127.0.0.1/services/soap-server.php?wsdl");
    
            // servindo a classe Calculadora
            $soap->setClass('Calculadora');
            $soap->handle();
            exit;
    }
    
    /*
     * 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;
            }
    }
    

    Considerações:

    • Lembre-se de modificar a URL onde seu webservice esta acessível. Trocando http://127.0.0.1/services/soap-server.php pela URL correta de acordo com o seu ambiente.
    • Preste atenção nos comentários utilizados nos métodos da classe Calculadora. Eles são utilizados para ajudar o Zend\Soap\AutoDiscover na criação do WSDL. Lembre-se de ajustá-los de acordo com os tipos de dados manipulados pelos métodos do seu webservice.
  7. Criando o Webservice Cliente
  8. Vamos demonstrar como criar o webservice cliente para consumir o webservice anterior usando as classes do Zend Framework 2. Segue abaixo a implementação do cliente do webservice usando a classe Zend\Soap\Client:

    Arquivo soap-client.php

    <?php
    // incluir o autoload para o zf2
    require_once("autoload-zend.php");
    
    // canal de comunicacao com o webservice, apontar para a URL do WSDL
    $soap = new Zend\Soap\Client("http://127.0.0.1/services/soap-server.php?wsdl");
    
    // utilizando as funcoes do webservice
    echo $soap->soma(5, 5) . "<br />"; // 10
    echo $soap->subtrai(100, 50) . "<br />"; // 50
    
  9. Referências
  10. Neste artigo foi abordado a essência da criação de Webservices SOAP com Zend Framework 2. Para se aprofundar mais no assunto, segue links da documentação oficial do Zend Framework 2 referente a Webservices SOAP:

    http://framework.zend.com/manual/2.0/en/modules/zend.soap.server.html
    http://framework.zend.com/manual/2.0/en/modules/zend.soap.client.html
    http://framework.zend.com/manual/2.0/en/modules/zend.soap.auto-discovery.html

    Caso queira uma introdução bem feita sobre a arquitetura do protocolo SOAP:

    http://www.w3schools.com/soap/default.asp

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

3 Respostas to “Webservices SOAP com Zend Framework 2”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

Parabéns pelo material, mas, como estou realmente iniciando no zf2, teria como me indicar em que diretório você cria cada um destes arquivos php? Abraços Daniel

Olá Daniel,

Você deve criar um diretório dentro do local onde esta configurado o DocumentRoot do seu webserver.

Todos os arquivos deste artigo devem estar dentro do mesmo diretório.

Boa sorte!

Fiz o exemplo em 5 minutos e funcionou de boa. Parabéns pelo tutorial, me ajudou bastante.


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: