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

ZF2: Writing Service Components

ZF2: Writing Service Components

Writing Service Components with Zend Framework 2.

Mike Willbanks

May 02, 2013
Tweet

More Decks by Mike Willbanks

Other Decks in Technology

Transcript

  1. ZF2: Writing
    Service Components
    Mike Willbanks | Barnes & Noble
    Zend Webinar: Thursday, May 2nd 2013

    View Slide

  2. 2
    Housekeeping…
    •  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 Service Components
    • Writing a Service Component
    • Incorporating your Service Component

    View Slide

  4. Background…
    Why Service Components

    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. Service Component Overview
    Goals, Lifecycle, and more.

    View Slide

  11. 11
    RFC March 2012 “RFC Service Components”
    Removal of ZF2 Zend\Service namespace into a separate namespace
    (ZendService) and under their own GitHub project.

    View Slide

  12. Goals of ZF2 Service Components
    • Ability to version separately from core framework
    • Easier to leverage outside of a ZF context
    • Encourage service providers to further contribute

    View Slide

  13. Services for Contribution (Official Services)
    • 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!

    View Slide

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

    View Slide

  15. 15
    Published ZendService Packages
    A published package for ZendService components exist on
    packages.zendframework.com.

    View Slide

  16. Service Component 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

  17. Writing a Service Component
    By example of ZendService\Google\Gcm

    View Slide

  18. General Information
    • Service Components are really just like framework libraries
     However, the namespace implies 3rd party integrations.
     They are also organized like the framework.
    • Service Components 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.

    View Slide

  19. 19
    Why Not Modules?

    View Slide

  20. Why Not Modules?
    • Modules are more specifically for ZF2 Applications
    • Service Components are reusable libraries for any code
    base.
    • Base Rule
     If it involves the MVC; it should more than likely be a module.

    View Slide

  21. 21
    Starting off…
    The file structure of a Service Component.

    View Slide

  22. 22
    ZendService Components License
    https://raw.github.com/zendframework/zf2/master/LICENSE.txt

    View Slide

  23. 23
    Composer Stub
    Main information for your specific library.

    View Slide

  24. 24
    Composer Stub
    Ensure you handle dependencies.

    View Slide

  25. Unit Testing
    • Quick Start
     Clone an existing Service Component (Currently no skeleton)
     Copy over files from the tests directory: _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.

    View Slide

  26. Unit Testing
    • Tests should contain proper name spacing
     ZendServiceTest\Google\Gcm
    • Files you need should be located in an _files directory
    inside the test area of your component
     tests/ZendService/Google/Gcm/_files
    • Write unit tests like normal!

    View Slide

  27. Library Code!
    • The guts of the library is what most of us are familiar with
    • Write your library inside of your compliant directory
     library/ZendService/Google/Gcm
    • Ensure proper namespacing
     ZendService\Google\Gcm
    • Attempt to follow great naming so that it makes sense!

    View Slide

  28. Coding Standards
    • Remember to make use of the coding standards!
     Docblocks
     Import the proper packages from their respective namespaces
     Read the coding standards doc:
    • http://framework.zend.com/wiki/display/ZFDEV2/Coding+Standards
    • Mainly; PSR-0, PSR-1, PSR-2 (there are slight differences)

    View Slide

  29. Best Practices
    • Follow conventions
     PSR-0/1/2, file locations, options classes
    • Hard dependencies
     Use the constructor!
     Only set dependencies for items you require!
    • Write Tests
     Hook into Travis-CI, go for 100% code coverage
    • Discoverability
     Put the component on Packagist, submit it for inclusion to
    ZendService.

    View Slide

  30. Documentation
    • 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/service-google-gcm
    • Write your documentation
    • Submit a PR

    View Slide

  31. 31
    Documentation is built out of reStructuredText
    Yes, Docbook has gone away; so fear not!

    View Slide

  32. 32
    Language Files
    Always start with English first aka “en” as it is the default in the event
    a translation is missing.

    View Slide

  33. 33
    Modify docs/language/en/index.rst to add in your new service
    Having a table of contents is a good thing!

    View Slide

  34. 34
    Modify docs/language/en/index.rst to add in your new service
    Follow the convention!

    View Slide

  35. 35
    Write Away!
    docs/language/en/modules/zendservice.google.gcm.rst or the like

    View Slide

  36. 36
    Seeing your Documentation
    • Install the proper tools
     apt-get install python-setuptools python-pygments
     easy_install -U Sphinx
    • Enter the docs/ directory
    • Run: make html

    View Slide

  37. 37
    Your documentation will now be in:
    docs/_build/html
    Review for errors before sending the PR

    View Slide

  38. Integrating your Service
    Add the module to the composer configuration
    Add in potential configuration
    Setup the service manager
    Fetch it inside of a controller

    View Slide

  39. 39
    Add to your composer.json!
    Followed by “php composer.phar install”

    View Slide

  40. 40
    Handling Configuration
    Likely in /path/to/zf2app/config/autoload/local.php

    View Slide

  41. 41
    Service Manager Setup
    Creating a simple factory to get a configured Client.

    View Slide

  42. 42
    Leveraging your Service Factory in a Controller
    We can easily fetch it now when we have a ServiceLocator.

    View Slide

  43. Questions?
    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

    View Slide