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

ZendCon 2012 - Writing Services with ZF2

ZendCon 2012 - Writing Services with ZF2

ZF2 takes a different approach to services; there are several services out there and you should be providing the ability for ZF2 to integrate with this. ZF2 marries services with composer and a different packaging mechanism to ensure that services can be released without a specific framework version. This not only helps the framework but helps you prevent an API changing in between framework releases without having an issue of awaiting a framework release.

Mike Willbanks

October 24, 2012

More Decks by Mike Willbanks

Other Decks in Technology


  1. 2 Housekeeping… •  Talk  Slides will be posted after the

    talk. •  Me  Sr. Web Architect Manager at NOOK Developer  Open Source Contributor  Where you can find me: •  Twitter: mwillbanks G+: Mike Willbanks •  IRC (freenode): mwillbanks Blog: http://blog.digitalstruct.com •  GitHub: https://github.com/mwillbanks
  2. 11 • RFC March 2012 “RFC Service Components”  http://framework.zend.com/wiki/display/ZFDEV2/RFC+-+Service +Components • Removal

    of ZF2 Zend\Service namespace into a separate namespace and repository. Changing for the Better
  3. 12 • Ability to version separately from core framework • Easier to

    leverage outside of a ZF context • Encourage service providers to further contribute Goals of ZF2 Services
  4. 13 • Independently versioned • Dependencies on framework versions (2.*, 2.0.*, 2.0.1)

    • Maintain dependencies by specific packages • Must follow ZF coding standards • Must be unique  A service that does the same thing should not already exist! Services for Contribution (Official Services)
  5. 14 Service Component Lifecycle Discuss on Contributor Mailing List CR

    Team Review Fork Repo Build Component IRC Vote (Meeting Agenda) Publish!
  6. 15 Service Maintenance • Must be maintained for the duration of

    major versions  Exceptions must be noted in the ChangeLog  Component should only state dependency on minor versions • Maintainers must attempt at all times to keep compatibility with the latest version  If unable to maintain, actively recruit, if still unable ZF or CR team will make a recommendation on the component.
  7. 18 • Services are really just like framework libraries  However, the

    namespace implies 3rd party integrations.  They are also organized like the framework. • Services should be reusable for other developers  Write it out based on the API and not just what you need. • Create reasonable dependencies  Zend\Http and Zend\Stdlib being most common. General Information
  8. 19 • Modules are more specifically for ZF • Components are reusable

    libraries for any code base. • Base Rule  If it involves the MVC; it should more than likely be a module. Why Not Modules?
  9. 20 • Build out the file structure:  library/ZendService/Twitter  tests/ZendService/Twitter • Add LICENSE,

    README, .travis.yml, .gitignore  Just copy these over from another project  Update the readme for the project Starting Off..
  10. 23 • Because we all do TDD right?  From a module;

    copy over the _autoload.php, Bootstrap.php, phpunit.xml.dist, TestConfiguration.php.dist, TestConfiguration.php.travis • You will need to customize  phpunit.xml.dist – Change out the unit test name.  TestConfiguration.php.dist – Configure your constants and configuration. Unit Testing
  11. 24 • Tests should contain proper namespacing  ZendServiceTest\Twitter • Right now the

    Twitter component just uses ZendTest\Twitter J • Files you need should be located in an _files directory inside the test area of your component  tests/ZendService/Twitter/_files • Write unit tests like normal! Unit Testing
  12. 25 • The guts of the library is what most of

    us are familiar with • Write your library inside of your compliant directory  library/ZendService/Twitter • Your first file should very well likely be that of the service name  library/ZendService/Twitter/Twitter.php • Ensure proper namespacing  ZendService\Twitter Library Code!
  13. 26 • Remember to make use of the coding standards!  Docblocks

    • @category Zend • @package Zend_Service • @subpackage Twitter  Import the proper packages from their respective namespaces • No one likes to write out the full namespace time and time again…  Read the coding standards doc: • http://framework.zend.com/wiki/display/ZFDEV2/Coding+Standards • Mainly; PSR-0, PSR-1, PSR-2 (there are likely slight differences) Coding Standards
  14. 27 • The most dreaded part of the job… • All of

    the documentation is in the “zf2-documentation” project under the “zendframework” github organization.  This will likely change for services in the future. • Fork the project • Create a feature branch: feature/twitter • Write your documentation • Submit a PR Documentation
  15. 28 • Documentation is built out of reStructuredText  Yes, Docbook has

    gone away; so fear not! • Language Files  Always start with English first aka “en” as it is the default in the event a translation is missing. • Modify docs/language/en/index.rst to add in your new service  Follow the convention; for a service you will use zendservice.twitter.intro.rst • Create your file  docs/language/en/modules/zendservice.twitter.intro.rst or the like Documenting
  16. 29 • Install the proper tools  apt-get install python-setuptools python-pygments  easy_install

    -U Sphinx • Enter the docs/ directory • Run: make html • Your documentation will now be in:  docs/_build/html  Review for errors before sending the PR Seeing your Documentation
  17. 31 • Add the module to the composer configuration • Add in

    potential configuration • Setup the service manager • Fetch it inside of a controller We will leverage the Skeleton Application
  18. 36 •  These slides will be posted to SlideShare &

    SpeakerDeck.   SpeakerDeck: http://speakerdeck.com/u/mwillbanks   Slideshare: http://www.slideshare.net/mwillbanks   Twitter: mwillbanks   G+: Mike Willbanks   IRC (freenode): mwillbanks   Blog: http://blog.digitalstruct.com   GitHub: https://github.com/mwillbanks Questions?