45
SOA with Zend Framework By Mike Willbanks Software Engineering Manager CaringBridge

SOA with Zend Framework

Embed Size (px)

DESCRIPTION

Implementing SOA with the Zend Framework 1.x versions.

Citation preview

Page 1: SOA with Zend Framework

SOA with

Zend Framework

By Mike Willbanks

Software Engineering Manager

CaringBridge

Page 2: SOA with Zend Framework

2

•Software Engineering Manager at CaringBridge

•Open Source Contributor

•Organizer of MNPHP

•Where you can find me:

Twitter: mwillbanks

G+: Mike Willbanks

IRC (freenode): lubs

Blog: http://blog.digitalstruct.com

About Mike…

Page 3: SOA with Zend Framework

The Back Story Definitions

SOA In Other Words

A Question to Consider

Page 4: SOA with Zend Framework

4

•SOA – Service-Oriented Architecture

A set of principles and methodologies for designing and developing

software.

A structure for delivering content through services.

• Think of a service consumer attaching to your web service; it likely is

not using a database.

•Service

A set of related software functionalities that can be reused for

different purposes.

Essentially; the encompassed business functionality divided into

tasks that streamline the interface and remove the spaghetti.

Definitions

Page 5: SOA with Zend Framework

5

•How often have you thought about not only how your code

can serve others but how it can service you, your team

along side of supporting external parties?

Think core site.

Think mobile.

Think public.

A Question to Consider

Page 6: SOA with Zend Framework

6

•Slight adjustments when not using a service based model

has a larger scale of changes throughout your app.

•Adding caching or logging can be more difficult.

•Your entity was split into multiple tables but you utilized a

Zend_Db_Table for the model class. It is going to be a

larger change.

•Business Process in the Controller; forces implementation

into the additional products and if it changes has down

stream expense.

What I mean by that…

Page 7: SOA with Zend Framework

7

Make it stop!

Page 8: SOA with Zend Framework

Zend Framework and SOA Service Layer

Decorating Models

Attaching the Servers

Page 9: SOA with Zend Framework

Service Layer One of the most important things when building a SOA layer

is going to be the underlying services; these services are

enabled by the architecture of your models.

Page 10: SOA with Zend Framework

10

Aspects of a Service Layer

Page 11: SOA with Zend Framework

11

•Satisfies a Business function

Function broken into Tasks

•Easy consumption by your application

•Allows vast re-use and more generic implementations

•Decoupled to represent more or less a single item

•Application logic becomes more encompassed

Filtering

Validation

Transactions / Interactions between Domain Models

A Service

Page 12: SOA with Zend Framework

12

Example Service

Page 13: SOA with Zend Framework

13

•A domain model is a representative entity of “something”

that solves a domain problem.

•The entity is NOT explicitly tied to your database.

•The entity essentially contains getters and setters for

properties and potentially some behaviors.

Domain Models

Page 14: SOA with Zend Framework

14

Example Domain Model

Page 15: SOA with Zend Framework

15

•A data mapper handles the communication between the

data source and the population of an domain model.

In a ZF context this is generally fetching data from

Zend_Db_Table.

•Extremely flexible and easily handles if the underlying data

changes.

Alternatively; when you now have separate tables that still can

represent the same domain model.

Data Mapper

Page 16: SOA with Zend Framework

16

Example Data Mapper

Page 17: SOA with Zend Framework

17

•Persistence… you need to store it somewhere!

•Data may come from several places…

File System

Web Service

NoSQL DB

Relational DB

• If you utilize an ORM this is also where it would live.

Data Store

Page 18: SOA with Zend Framework

18

Data Store Example

Page 19: SOA with Zend Framework

Decoration Caching

Logging

Formatting

Page 20: SOA with Zend Framework

20

•Let’s face it… decorators do a better job decorating than we

do ourselves.

Decorators?

Page 21: SOA with Zend Framework

21

•Decorators allow you to add new behaviors to an existing

object dynamically…

Remember the previous examples? We used a few interfaces and

now you will see why.

•General Use Cases

Performance is becoming more of a concern and you need to

implement caching.

An object is coming back with unexpected data at times; so you

need to be able to log what was coming through.

You need to represent an object differently such as JSON, XML,

Serialized PHP, etc.

Decorators

Page 22: SOA with Zend Framework

22

Implementing Caching

Page 23: SOA with Zend Framework

23

Implementing Logging

Page 24: SOA with Zend Framework

24

Changing the Format

Page 25: SOA with Zend Framework

25

•Remember decoration is just a pattern; it can help you do

several things but it cannot do everything!

•Don’t be afraid to utilize other patterns to assist you in the

build out of your models.

•The ultimate goal here is to remove the constant cost of

refactoring for every feature change.

Just Decoration?

Page 26: SOA with Zend Framework

Attaching the Servers Zend_Json_Server

Zend_XmlRpc_Server

Zend_Soap_Server

Zend_Rest_Server

Page 27: SOA with Zend Framework

27

•All of the server components act approximately the same in

terms of their API.

•Each of them follow the same paradigm allowing you to

connect them directly to a service object.

That means… this is going to be easy!

•However, the server components utilize Reflection for

AutoDiscovery as well as to understand the actual call.

The Server Components

Page 28: SOA with Zend Framework

28

So, docblocks are always good!

Page 29: SOA with Zend Framework

29

•Why use controllers?

Because they are already there and it fits directly into how you

made your controller in the first place.

You can leverage your existing code to add them in.

Providing only a new action makes this possible.

Easily discoverable just by the URI.

• In our examples – we are going to leverage an API action

Implementing Servers through Controllers

Page 30: SOA with Zend Framework

30

Putting in an API method with Zend_Json_Server

Page 31: SOA with Zend Framework

31

•We just implemented a JSON RPC server, wasn’t that easy?

•You now have methods that you can call through a JSON

RPC client based right off of your service object.

•We did skip out on something, isn’t there a discoverability

component?

It really is just that “easy”

Page 32: SOA with Zend Framework

32

Adding Discovery

Page 33: SOA with Zend Framework

33

•The API is now exposed, people are using it but you are

getting requests for additional protocols

Where is the SOAP API?

How come there is no XML RPC API?

Everyone uses more REST based API’s, WTF?

•Time to implement some more!

For now, we will implement this using a type variable.

The Community Wants More

Page 34: SOA with Zend Framework

34

Multiple Servers – One API.

Page 35: SOA with Zend Framework

35

•Previously in our decoration; I showed you how to change

the output by decoration.

•While they can be useful sometimes; Context Switching

handles much of this for you already.

So it was really just an example but may become relevant

elsewhere.

So What About those Formatters?

Page 36: SOA with Zend Framework

36

Example Context Switch

Page 37: SOA with Zend Framework

Versioning A couple options to help version your services.

Page 38: SOA with Zend Framework

38

•There are a few different ways to version services; we know

things will change and we need a way to support BC.

•Versioning is important and can be implemented several

ways.

•They are not “perfect” but can and will work.

Versioning Services

Page 39: SOA with Zend Framework

39

•Make version directories in your models directory

Pros

• Quick to implement

• Individual services take on a new version

Cons

• Not all services take on the same version number; more confusing to

the consumer of the service.

• You need to push a version parameter to your api action

• You would end up implementing fallbacks based on versions not

existing.

Versioning by Directory

Page 40: SOA with Zend Framework

40

•Make version modules

Pros

• Separation of entire service into a new module

• All services take on a new version.

• Simply extend the previous models.

Cons

• Latest service would always be contained in a globals model folder to

prevent code duplication;

• Many more files; not easy to simply see what is new and what is not.

• Modules work for this but; only really work if your entire api is a

module and the other application is not. Which removes part of our

reuse.

Versioning by Module

Page 41: SOA with Zend Framework

Other Notes Things worth mentioning…

Page 42: SOA with Zend Framework

42

•Planning for consumer performance is important for

instance:

Setting a reasonable timeout on the client end.

Messaging the user if it did timeout or some other issue occurred.

Utilizing some form of caching between the service and you

(something like a squid proxy) to help boost the requests per

second.

Implementing local caching and keeping track of things for that

user.

Utilize parallelism; if you need to grab multiple things do them at

one time.

Parsing is expensive; do it one and pass it around.

Consumer Performance

Page 43: SOA with Zend Framework

43

•When implementing web services; there are a few

additional things to think about

Rate Limiting

• Implemented more or less in a plug-in.

Authentication

• Leveraging tokens or API keys.

– A token service can deal with authentication and even allow them to have

sessions through the service layer.

Authorization

• Extending the server components to be aware of resources.

– This is harder but gives fine grained control.

• Otherwise, if you allow to a service they can access the entire service.

Who are you?

Page 44: SOA with Zend Framework

44

•How will this all work in ZF2?

Well; I’m not fully sure but there is an RFC!

• http://framework.zend.com/wiki/display/ZFDEV2/RFC+-

+Server+Classes

All I can say; is it will be better with the new EventManager

• Authorization will become easier.

• Plugging in will be entirely more flexible.

Zend Framework 2

Page 45: SOA with Zend Framework

Questions? Give me feedback: http://joind.in/3784

Slides will be posted at joind.in later this afternoon.