59
Decoupled CMS Lukas Smith | @lsmith slides created in collaboration with @bergie

Decoupled cms sunshinephp 2014

Embed Size (px)

DESCRIPTION

Talk about why and how one can create decoupled (PHP) web applications

Citation preview

Page 1: Decoupled cms sunshinephp 2014

Decoupled CMSLukas Smith | @lsmith

!slides created in collaboration with @bergie

Page 2: Decoupled cms sunshinephp 2014

Framework

Database File System

Application

Page 3: Decoupled cms sunshinephp 2014

We've seen this picture before

Page 4: Decoupled cms sunshinephp 2014

Your CMS is a monolith

Page 5: Decoupled cms sunshinephp 2014

A great hiding place for spaghetti

Page 6: Decoupled cms sunshinephp 2014

It is holding you hostageas you are trying to scale and evolve

Page 7: Decoupled cms sunshinephp 2014

Technologies are a fashion

Page 8: Decoupled cms sunshinephp 2014

Technologies fail

Page 9: Decoupled cms sunshinephp 2014

The internet was built on protocols

Page 10: Decoupled cms sunshinephp 2014

It is scalable

Page 11: Decoupled cms sunshinephp 2014

It embraces failure

Page 12: Decoupled cms sunshinephp 2014

It delegates responsibility empowering clients

Page 13: Decoupled cms sunshinephp 2014

It is language agnostic

Page 14: Decoupled cms sunshinephp 2014

It all boils down to ..

Page 15: Decoupled cms sunshinephp 2014

Decoupling

Page 16: Decoupled cms sunshinephp 2014

like we're back in 2000s

Service-Oriented Architecture

Page 17: Decoupled cms sunshinephp 2014

Services of a typical web application

!Accounts: login, authorization API: data storage and retrieval WWW: actual web front-end

Most frameworks put these in the same box - why?

Page 18: Decoupled cms sunshinephp 2014
Page 19: Decoupled cms sunshinephp 2014
Page 20: Decoupled cms sunshinephp 2014
Page 21: Decoupled cms sunshinephp 2014
Page 22: Decoupled cms sunshinephp 2014
Page 23: Decoupled cms sunshinephp 2014
Page 24: Decoupled cms sunshinephp 2014

You're already using SOA

Page 25: Decoupled cms sunshinephp 2014

Atom & RSS

Page 26: Decoupled cms sunshinephp 2014

Authentication & identity

Page 27: Decoupled cms sunshinephp 2014

Commenting

Page 28: Decoupled cms sunshinephp 2014

oEmbed

Page 29: Decoupled cms sunshinephp 2014

Analytics

Page 30: Decoupled cms sunshinephp 2014

Search

Page 31: Decoupled cms sunshinephp 2014

Semantic mark-up

Page 32: Decoupled cms sunshinephp 2014

Payment

Page 33: Decoupled cms sunshinephp 2014

Infrastructure: SaaS, PaaS

Page 34: Decoupled cms sunshinephp 2014

But not everything is ponycorns

Page 35: Decoupled cms sunshinephp 2014
Page 36: Decoupled cms sunshinephp 2014

...but if you don't know Drupal, you can be faster with Jekyll and Disqus

SOA can take longer

Page 37: Decoupled cms sunshinephp 2014

...especially when you're still sketching out your service

API incompatibilities

Page 38: Decoupled cms sunshinephp 2014

providers like Heroku can help here

Server for each service can be expensive

Page 39: Decoupled cms sunshinephp 2014

less framework support, fewer books, less experience

You're on your own

Page 40: Decoupled cms sunshinephp 2014

Many other valid concerns

Backup

Legal

Price

Terms of serviceQuality concerns

Setup delays

Cross DB queries

API changes

PerformanceMissing Features

Down timeEnd of service

User ExperienceLatency

Page 41: Decoupled cms sunshinephp 2014

Making SOA manageable

Page 42: Decoupled cms sunshinephp 2014

Edge Side Includes

Page 43: Decoupled cms sunshinephp 2014

Edge Side Includes! ! ! ! ! <e

si:in

clud

e sr

c=".

." />

!!<esi:include src=".." />

!!!!!!!!!<esi:include src=".." />

<esi:include src=".." />

!!<esi:include src=".." /

>

<esi:include src=".." />

Page 44: Decoupled cms sunshinephp 2014

Events, Message Queues

Page 45: Decoupled cms sunshinephp 2014

Applying decoupling to PHP applications

Page 46: Decoupled cms sunshinephp 2014

Interfacesprotocols on programming language level

Page 47: Decoupled cms sunshinephp 2014

bikeshedding instead of defining interfaces?

Framework Interoperability Group

Page 48: Decoupled cms sunshinephp 2014

We are not yet tackling the hard stuff

.. did give us PSR-3 for logging

Page 49: Decoupled cms sunshinephp 2014

PHP Content Repository Specification

• Adaption of the JCR standard • Contains mostly just interfaces • API covers the needs of CMS • Semi-structured data

• Hierarchical data • Fulltext Search • Versioning • etc.

Page 50: Decoupled cms sunshinephp 2014

Composer as the saviordependency management done right

Page 51: Decoupled cms sunshinephp 2014
Page 52: Decoupled cms sunshinephp 2014

Interface providers in Composer"name": "jackalope/jackalope", "type": "library", ... "provide": { "phpcr/phpcr-implementation": "2.1.0" },

… now you can depend on “phpcr-implementation” instead of a specific provider

Page 53: Decoupled cms sunshinephp 2014
Page 54: Decoupled cms sunshinephp 2014

Create.js

Page 55: Decoupled cms sunshinephp 2014

Decoupling your CMS

Example: Symfony CMF !

• PHPCR o Single API, different storage implementations

• Symfony2 o Off-the-shelf framework

• Create.js o Client-side inline editing with RDFa and JSON-LD

• Varnish o Construct pages from output of different services

Page 56: Decoupled cms sunshinephp 2014

Think protocols...and interfaces

Page 57: Decoupled cms sunshinephp 2014

...whether it is a library or a hosted service

Reuse existing infrastructure

Page 58: Decoupled cms sunshinephp 2014

...not monolithic code

Build services

Page 59: Decoupled cms sunshinephp 2014

Questions?!

Lukas Smith | @lsmith !

http://pooteeweet.org https://github.com/lsmith77