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
Tweet

More Decks by Mike Willbanks

Other Decks in Technology

Transcript

  1. Writing Services with
    ZF2
    Mike Willbanks | Barnes & Noble

    View full-size slide

  2. 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

    View full-size slide

  3. 3
    Agenda
    • Background
    • ZF2 Services
    • Writing a Service
    • Implementing your Service

    View full-size slide

  4. Background…

    View full-size slide

  5. 5
    A Definition
    ZF 1 contained Zend_Service_* components

    View full-size slide

  6. 6
    Zend_Service_*
    Components were included in the core
    distribution

    View full-size slide

  7. 7
    Zend_Service_*
    Make it easy for people to have it available…

    View full-size slide

  8. 8
    1.11.13 Release
    Caused several issues

    View full-size slide

  9. 9
    Started Getting Messy…

    View full-size slide

  10. Services in ZF2

    View full-size slide

  11. 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

    View full-size slide

  12. 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

    View full-size slide

  13. 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)

    View full-size slide

  14. 14
    Service Component Lifecycle
    Discuss on
    Contributor Mailing
    List
    CR Team Review Fork Repo
    Build Component
    IRC Vote
    (Meeting
    Agenda)
    Publish!

    View full-size slide

  15. 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.

    View full-size slide

  16. 16
    How are we doing so far?

    View full-size slide

  17. Writing a Service
    By example of ZendService\Twitter

    View full-size slide

  18. 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

    View full-size slide

  19. 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?

    View full-size slide

  20. 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..

    View full-size slide

  21. 21
    Create Your Composer File

    View full-size slide

  22. 22
    Dependencies

    View full-size slide

  23. 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

    View full-size slide

  24. 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

    View full-size slide

  25. 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!

    View full-size slide

  26. 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

    View full-size slide

  27. 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

    View full-size slide

  28. 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

    View full-size slide

  29. 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

    View full-size slide

  30. Integrating your Service

    View full-size slide

  31. 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

    View full-size slide

  32. 32
    Composerize
    php composer.php install

    View full-size slide

  33. 33
    Potential Configuration

    View full-size slide

  34. 34
    Setup the Service Manager

    View full-size slide

  35. 35
    Controller Integration

    View full-size slide

  36. 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?

    View full-size slide