writing services with zf2
DESCRIPTION
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.TRANSCRIPT
![Page 1: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/1.jpg)
Writing Services with ZF2
Mike Willbanks | Barnes & Noble
![Page 2: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/2.jpg)
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
![Page 3: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/3.jpg)
3
Agenda
• Background
• ZF2 Services
• Writing a Service
• Implementing your Service
![Page 4: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/4.jpg)
Background…
![Page 5: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/5.jpg)
5
A Definition ZF 1 contained Zend_Service_* components
![Page 6: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/6.jpg)
6
Zend_Service_* Components were included in the core distribution
![Page 7: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/7.jpg)
7
Zend_Service_* Make it easy for people to have it available…
![Page 8: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/8.jpg)
8
1.11.13 Release Caused several issues
![Page 9: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/9.jpg)
9
Started Getting Messy…
![Page 10: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/10.jpg)
Services in ZF2
![Page 11: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/11.jpg)
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
![Page 12: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/12.jpg)
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
![Page 13: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/13.jpg)
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)
![Page 14: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/14.jpg)
14
Service Component Lifecycle
Discuss on Contributor Mailing
List
CR Team Review Fork Repo
Build ComponentIRC Vote(Meeting Agenda)
Publish!
![Page 15: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/15.jpg)
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.
![Page 16: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/16.jpg)
16
How are we doing so far?
![Page 17: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/17.jpg)
Writing a Service By example of ZendService\Twitter
![Page 18: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/18.jpg)
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
![Page 19: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/19.jpg)
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?
![Page 20: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/20.jpg)
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..
![Page 21: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/21.jpg)
21
Create Your Composer File
![Page 22: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/22.jpg)
22
Dependencies
![Page 23: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/23.jpg)
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
![Page 24: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/24.jpg)
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
![Page 25: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/25.jpg)
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!
![Page 26: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/26.jpg)
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
![Page 27: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/27.jpg)
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
![Page 28: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/28.jpg)
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
![Page 29: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/29.jpg)
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
![Page 30: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/30.jpg)
Integrating your Service
![Page 31: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/31.jpg)
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
![Page 32: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/32.jpg)
32
Composerize
php composer.php install
![Page 33: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/33.jpg)
33
Potential Configuration
![Page 34: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/34.jpg)
34
Setup the Service Manager
![Page 35: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/35.jpg)
35
Controller Integration
![Page 36: Writing Services with ZF2](https://reader033.vdocuments.site/reader033/viewer/2022052619/5558245ed8b42a5e468b513b/html5/thumbnails/36.jpg)
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?