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 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 Slide

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

    View Slide

  4. Background…

    View Slide

  5. 5
    A Definition
    ZF 1 contained Zend_Service_* components

    View Slide

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

    View Slide

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

    View Slide

  8. 8
    1.11.13 Release
    Caused several issues

    View Slide

  9. 9
    Started Getting Messy…

    View Slide

  10. Services in ZF2

    View 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 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 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 Slide

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

    View 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 Slide

  16. 16
    How are we doing so far?

    View Slide

  17. Writing a Service
    By example of ZendService\Twitter

    View 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 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 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 Slide

  21. 21
    Create Your Composer File

    View Slide

  22. 22
    Dependencies

    View 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 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 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 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 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 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 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 Slide

  30. Integrating your Service

    View 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 Slide

  32. 32
    Composerize
    php composer.php install

    View Slide

  33. 33
    Potential Configuration

    View Slide

  34. 34
    Setup the Service Manager

    View Slide

  35. 35
    Controller Integration

    View 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 Slide