Taking the Hype out of Hypermedia

Post on 10-May-2015

474 views 1 download

Tags:

description

Slides for my talk @ RubyFuza 2012

Transcript of Taking the Hype out of Hypermedia

TAKING THE HYPE OUT OF HYPERMEDIA

ryan.lemmer@factor10.com // @ryanlemmer // GMT+2

BUILDING UI

TEMPLATE DRIVEN

TEMPLATE DRIVEN

<table><tr><td> <%= @cart.total %> </td>...

</tr></table>

DATA + TEMPLATE DRIVEN

DATA + TEMPLATE DRIVEN

{ total: 987, discount: 10, ...}

DATA + TEMPLATE DRIVEN

{ total: 987, discount: 10, ...}

AJAX GET /cart/1

CONSISTENCY

CONSISTENCY

CONSISTENCY

CONSISTENCY

CONSISTENCY

... MAKES TESTABILITY TOUGH

(LACK OF)

TESTABILITYto test, you need a (nice) handle on the situation

TESTABILITYto test, you need a (nice) handle on the situation

# capybarait "signs me in" do within("#session") do fill_in 'Login', :with => 'boo@hoo.com' fill_in 'Password', :with => 'secrat(sic)' end click_link 'Sign in'end

INTERACTIONS

INTERACTIONS

INTERACTIONS

INTERACTIONS

INTERACTIONSIMPLICIT

INTERACTIONSIMPLICIT

def update_item_qty @item = @cart.items.find(params[:id])

if @item.update_attributes(:quantity => params[:qty]) redirect_to(@item) else render "edit" endend

LAY OF THE LAND

LAY OF THE LAND

LAY OF THE LAND

LAY OF THE LAND

HYPERMEDIA DRIVEN

HYPERMEDIA DRIVEN

{ data: {

total: 987, discount: 10, ...},

links: {{rel: “checkout” uri: “...”}

}

HYPERMEDIA DRIVEN

{ data: {

total: 987, discount: 10, ...},

links: {{rel: “checkout” uri: “...”}

}

after /checkout

{ data: {

total: 987, discount: 10, ...},

links: {}}

HYPERMEDIA DSL

HYPERMEDIA DSLGET /cart/12312312

HYPERMEDIA DSLGET /cart/12312312

POST /cart/12312312

HYPERMEDIA

HYPERMEDIA

HYPERMEDIA

only for “open” carts

HYPERMEDIA+STATEMACHINE

HYPERMEDIA+STATEMACHINE

NEXT STEP ??

HYPERMEDIA+STATEMACHINE

NEXT STEP ??

resource state machine

HYPERMEDIA+STATEMACHINE

NEXT STEP ??

resource state machine

only checkout if cart is “open”

EXPLICIT INTERACTIONS

EXPLICIT INTERACTIONS

SERVER SIDE INTERACTION

LAYER

EXPLICIT INTERACTIONS

SERVER SIDE INTERACTION

LAYER

HATEOAS

INTERACTION LAYER

INTERACTION LAYER

“STRUCTURE”

HYPERMEDIA “FLOW”

AND CONSISTENCY?

AND CONSISTENCY?

removethen RELOAD

AND CONSISTENCY?

removethen RELOAD

ARCHITECTURE

ARCHITECTURE

WHAT’S NEXT?* Smart Hypermedia clients* Hypermedia Types => (HTML Forms, ATOM, ...)* machine-to-machine API’s => dynamic, executable

THANKSaslam khan

andreas brinklennart ohlsson

@factor10