Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Criando aplicações RestFul com Zend Framework 2

Criando aplicações RestFul com Zend Framework 2

Nessa palestra apresento algumas características do ZF2 como o ServiceManager e o EventManager e como usá-las para criar um módulo útil para criação de aplicações RESTFul

0227f6274b8a6cce078d7f8a91460c41?s=128

Elton Minetto

August 31, 2013
Tweet

Transcript

  1. Criando aplicações RESTFul com Zend Framework 2

  2. Quem?

  3. Elton Minetto Graduado/pós-graduado em Ciência da Computação Desenvolvedor desde 1997

    Professor desde 2004 Autor de três livros sobre PHP e um sobre grid computing Podcaster no Biz and Code CTO da Coderockr e do Code Squad Membro da diretoria da ABRAPHP
  4. Princípios REST

  5. Dê a todas as coisas um identificador

  6. http://zf2.dev/api/v1/album.album.json http://zf2.dev/api/v1/album.album.json/1 http://example.com/customers/1234 http://www.infoq.com/br/articles/rest-introduction

  7. Vincule as coisas

  8. <order self="http://x.com/orders/1234"> <amount>23</amount> <product ref="http://x.com/products/4554"></product> <customer ref="http://x.com/customers/1234"></customer> </order>

  9. Utilize os métodos padrão

  10. GET, PUT, POST, DELETE,HEAD, OPTIONS

  11. Recursos com múltiplas representações

  12. http://zf2.dev/api/v1/album.album.json http://zf2.dev/api/v1/album.album.xml ou usar o header Accept

  13. Comunique sem estado

  14. “[...]um servidor não deveria guardar o estado da comunicação de

    qualquer um dos clientes que se comunique com ele além de uma única requisição. A razão mais óbvia para isso é escalabilidade - o número de clientes que podem interagir com o servidor seria consideravelmente impactado se fosse preciso manter o estado do cliente”
  15. Zend Framework 2

  16. Desenvolvido pela Zend junto com a comunidade PHP Mais de

    2 anos de desenvolvimento Mais de 200 profissionais envolvidos Apoio Google, Microsoft, entre outras
  17. Mão na massa!

  18. Composer

  19. mkdir rest_zf2 cd rest_zf2 curl -sS https://getcomposer.org/installer | php

  20. ZFTool

  21. php composer.phar require zendframework/zftool:dev- master

  22. Criando o projeto

  23. php ./vendor/bin/zf.php create project ~/Documents/ Projects/vagrant/rest_zf2/Todo cd Todo php composer.phar

    self-update php composer.phar install
  24. Apache VHost

  25. <VirtualHost *:80> ServerName todo.dev DocumentRoot /vagrant/rest_zf2/Todo/public SetEnv APPLICATION_ENV "development" SetEnv

    PROJECT_ROOT "/vagrant/rest_zf2/Todo" <Directory /vagrant/rest_zf2/Todo/public> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
  26. Módulos

  27. "[] um módulo é uma coleção de código e outros

    arquivos que resolve um problema específico de uma aplicação ou site." Mattew O'Phinney. Zend Framework project leader
  28. Módulo Application Módulo Api Módulo Admin

  29. Criando o módulo Api

  30. cd ../ php ./vendor/bin/zf.php create module Api ~/ Documents/Projects/vagrant/rest_zf2/Todo/

  31. Banco de dados

  32. global.php https://gist.github.com/eminetto/5709289 sqlite3 data/todo.db create table item (id INTEGER PRIMARY

    KEY AUTOINCREMENT, description text, done int);
  33. Entidades e TableGateway

  34. src/Application/Model/Item.php https://gist.github.com/eminetto/5709294 src/Application/Model/ItemTable.php https://gist.github.com/eminetto/5709297 Application/Module.php https://gist.github.com/eminetto/5710850

  35. Rota

  36. Api/config/module.config.php https://gist.github.com/eminetto/5709324

  37. RestController

  38. Módulo Application Módulo Api Api\Controller\RestController

  39. Api/src/Controller/RestController https://gist.github.com/eminetto/5710862

  40. Eventos

  41. Um EventManager é um objeto que agrega listeners para um

    ou mais eventos e que gera (trigger) outros eventos. Um listener é uma função/método (callback) que reage a um evento
  42. Módulo Application Módulo Api Api\Controller\RestController Api\PreProcessor\PreProcessor (segurança) Api\PostProcessor\PostProcessor (serialização)

  43. Criando os eventos

  44. Alterar o api/Module.php https://gist.github.com/eminetto/5710879 PreProcessor: https://gist.github.com/eminetto/5710894 Application/config/entities.config.php (Segurança) https://gist.github.com/eminetto/5710859 PostProcessor:

    https://gist.github.com/eminetto/5710898
  45. Serializando Múltiplos formatos

  46. php composer.phar require jms/serializer:* src/Api/PostProcessor/AbstractPostProcessor.php https://gist.github.com/eminetto/5710903 src/Api/PostProcessor/Json.php https://gist.github.com/eminetto/5710908 src/Api/PostProcessor/Xml.php https://gist.github.com/eminetto/5710915

  47. Referências

  48. http://www.infoq.com/br/articles/rest-introduction http://www.slideshare.net/Alganet/rest-key http://framework.zend.com/manual/2.2/en/user-guide/ overview.html http://jmsyst.com/libs/serializer https://github.com/Coderockr/ApiModule

  49. @eminetto http://www.eltonminetto.net http://coderockr.com http://code-squad.com eminetto@coderockr.com