Criando aplicações RestFul com Zend Framework 2

4,432 views
4,235 views

Published on

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

Published in: Technology

Criando aplicações RestFul com Zend Framework 2

  1. 1. Criandoaplicações RESTFulcomZend Framework2
  2. 2. Quem?
  3. 3. EltonMinetto Graduado/pós-graduadoemCiênciadaComputação Desenvolvedordesde1997 Professordesde2004 AutordetrêslivrossobrePHPeumsobregridcomputing PodcasternoBizandCode CTOdaCoderockredoCodeSquad MembrodadiretoriadaABRAPHP
  4. 4. Princípios REST
  5. 5. Dêatodasascoisasum identificador
  6. 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. 7. Vinculeascoisas
  8. 8. <orderself="http://x.com/orders/1234"> <amount>23</amount> <productref="http://x.com/products/4554"></product> <customerref="http://x.com/customers/1234"></customer> </order>
  9. 9. Utilizeosmétodospadrão
  10. 10. GET,PUT,POST,DELETE,HEAD,OPTIONS
  11. 11. Recursoscommúltiplas representações
  12. 12. http://zf2.dev/api/v1/album.album.json http://zf2.dev/api/v1/album.album.xml ouusaroheaderAccept
  13. 13. Comuniquesemestado
  14. 14. “[...]umservidornãodeveriaguardaroestadoda comunicaçãodequalquerumdosclientesquese comuniquecomelealémdeumaúnicarequisição.A razãomaisóbviaparaissoéescalabilidade-onúmerode clientesquepodeminteragircomoservidorseria consideravelmenteimpactadosefosseprecisomantero estadodocliente”
  15. 15. ZendFramework2
  16. 16. DesenvolvidopelaZendjuntocoma comunidadePHP Maisde2anosdedesenvolvimento Maisde200profissionaisenvolvidos Apoio Google,Microsoft,entreoutras
  17. 17. Mãonamassa!
  18. 18. Composer
  19. 19. mkdir rest_zf2 cd rest_zf2 curl -sS https://getcomposer.org/installer | php
  20. 20. ZFTool
  21. 21. php composer.phar require zendframework/zftool:dev- master
  22. 22. Criandooprojeto
  23. 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. 24. ApacheVHost
  25. 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. 26. Módulos
  27. 27. "[]ummóduloéumacoleçãodecódigo eoutrosarquivosqueresolveum problemaespecíficodeumaaplicaçãoou site." MattewO'Phinney.ZendFrameworkprojectleader
  28. 28. Módulo Application Módulo Api Módulo Admin
  29. 29. CriandoomóduloApi
  30. 30. cd ../ php ./vendor/bin/zf.php create module Api ~/ Documents/Projects/vagrant/rest_zf2/Todo/
  31. 31. Bancodedados
  32. 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. 33. EntidadeseTableGateway
  34. 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. 35. Rota
  36. 36. Api/config/module.config.php https://gist.github.com/eminetto/5709324
  37. 37. RestController
  38. 38. Módulo Application Módulo Api ApiControllerRestController
  39. 39. Api/src/Controller/RestController https://gist.github.com/eminetto/5710862
  40. 40. Eventos
  41. 41. UmEventManageréumobjetoqueagregalistenerspara umoumaiseventosequegera(trigger)outroseventos. Umlisteneréumafunção/método(callback)quereagea umevento
  42. 42. Módulo Application Módulo Api ApiControllerRestController ApiPreProcessorPreProcessor (segurança) ApiPostProcessorPostProcessor (serialização)
  43. 43. Criandooseventos
  44. 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. 45. Serializando Múltiplosformatos
  46. 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. 47. Referências
  48. 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. 49. @eminetto http://www.eltonminetto.net http://coderockr.com http://code-squad.com eminetto@coderockr.com

×