Top Banner
Writing Services with ZF2 Mike Willbanks | Barnes & Noble
36

Writing Services with ZF2

May 17, 2015

Download

Technology

Mike Willbanks

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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Writing Services with ZF2

Writing Services with ZF2

Mike Willbanks | Barnes & Noble

Page 2: Writing Services with ZF2

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

3

Agenda

• Background

• ZF2 Services

• Writing a Service

•  Implementing your Service

Page 4: Writing Services with ZF2

Background…

Page 5: Writing Services with ZF2

5

A Definition ZF 1 contained Zend_Service_* components

Page 6: Writing Services with ZF2

6

Zend_Service_* Components were included in the core distribution

Page 7: Writing Services with ZF2

7

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

Page 8: Writing Services with ZF2

8

1.11.13 Release Caused several issues

Page 9: Writing Services with ZF2

9

Started Getting Messy…

Page 10: Writing Services with ZF2

Services in ZF2

Page 11: Writing Services with 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

Page 12: Writing Services with ZF2

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

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

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

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

16

How are we doing so far?

Page 17: Writing Services with ZF2

Writing a Service By example of ZendService\Twitter

Page 18: Writing Services with ZF2

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

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

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

21

Create Your Composer File

Page 22: Writing Services with ZF2

22

Dependencies

Page 23: Writing Services with ZF2

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

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

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

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

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

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

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

Integrating your Service

Page 31: Writing Services with ZF2

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

32

Composerize

php composer.php install

Page 33: Writing Services with ZF2

33

Potential Configuration

Page 34: Writing Services with ZF2

34

Setup the Service Manager

Page 35: Writing Services with ZF2

35

Controller Integration

Page 36: Writing Services with ZF2

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?