Mais uma postagem da séria Mão na massa. Aqui vamos ter uma aplicação Restful usando Zend Framework 2, esse tipo de aplicação é largamente utilizada para criação de APIs e arquitetura SOA.
Particularmente eu gosto do Rest por ele ser simples, acredito que essa seja a maior vantagem dele. Muitas pessoas dizem que ele é pior do que o SOAP por questões de segurança e bla bla bla. Para você ter uma ideia, podemos usar o OAuth no Rest, acredito que isso seja o suficiente para mostrar que é seguro. Outro motivo é o fato de usar Json, eu simplesmente acho mais legal que XML, nada mais a declarar. 🙂
Depois de falar esse monte de besteiras para você, vamos ao escopo dessa mão na massa.
Fazer um sistema que leia um CEP informado e retorne o endereço completo, o retorno deve ser em JSon e XML.
Para isso vamos fazer algo bem tranquilo, vamos apenas retornar o método get($id), com os dados fixos em um array.
Se você não tiver um ambiente pronto, eu recomendo usar o Vagrant, aqui uma postagem sobre ele e uma de como configrar um servidor LAMP. Ou, você pode usar o servidor embutido:
php -S 0.0.0.0:8080 -t public/ public/index.php
Primeiramente vamos montar o ambiente de desenvolvimento usando o Skeleton que a Zend disponibiliza, eu tenho um fork dele na minha conta do github e é ele que vamos usar. Download Skeleton.
Depois de descompactar e deixar pronto para uso, vamos as modificações.
Sempre tenho problemas na versão do PHP, por isso vamos usar o Zend Framework 2.2, precisamos alterar o composer.
Agora vamos executar o composer
php composer.phar install
Assim que ele terminar de executar já podemos consultar o site, no meu caso http://localhost:8080.
Vamos definir que a nossa URL para fazer a consulta de CEP será “/api/cep[.:format]/[:CEP]”. Como exemplos:
http://localhost:8080/api/cep.json/06460000
ou
http://localhost:8080/api/cep.xml/06460000
Para fazer isso, precisamos criar uma rota na nossa aplicação para ela responder por esse endereço.
cepsample/module/Application/config/module.config.php (link GitHub)
return array(
'router' => array(
'routes' => array(
...
'cep' => array(
'type' => 'Segment',
'options' => array(
'route' => '/api/cep[.:format]/[:id]',
'constraints' => array(
'format' => '(json)',
),
'defaults' => array(
'controller' => 'Application\Controller\Cep',
'format' => 'json',
),
),
),
No mesmo arquivo, procure o indíce “controllers”, ele deve se parecer com isso
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
),
E deve ficar assim
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController',
'Application\Controller\Cep' => 'Application\Controller\CepController'
),
),
Com o redirect pronto, podemos iniciar a construção do método em Rest
No caminho “modules/Application/src/Application/Controller” crie um arquivo chamado “CepController.php”, ele deve ser assim:
Agora quando acessarmos a URL ele vai nos mostrar o array que foi definido no método get($id). Se não passarmos nada depois no CEP na URL, o retorno será em JSon, podemos passar XML também.
Esse código por ser baixado pelo meu GitHub aqui.