Writing Services with ZF2 Mike Willbanks | Barnes & Noble
May 17, 2015
Writing Services with ZF2
Mike Willbanks | Barnes & Noble
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
3
Agenda
• Background
• ZF2 Services
• Writing a Service
• Implementing your Service
Background…
5
A Definition ZF 1 contained Zend_Service_* components
6
Zend_Service_* Components were included in the core distribution
7
Zend_Service_* Make it easy for people to have it available…
8
1.11.13 Release Caused several issues
9
Started Getting Messy…
Services in ZF2
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
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
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)
14
Service Component Lifecycle
Discuss on Contributor Mailing
List
CR Team Review Fork Repo
Build ComponentIRC Vote(Meeting Agenda)
Publish!
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.
16
How are we doing so far?
Writing a Service By example of ZendService\Twitter
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
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?
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..
21
Create Your Composer File
22
Dependencies
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
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
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!
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
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
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
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
Integrating your Service
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
32
Composerize
php composer.php install
33
Potential Configuration
34
Setup the Service Manager
35
Controller Integration
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?