Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Adaptive and evolvable apps
Search
Ben Longden
May 08, 2015
Technology
0
400
Adaptive and evolvable apps
Ben Longden
May 08, 2015
Tweet
Share
More Decks by Ben Longden
See All by Ben Longden
Spryker, an architecture for the web
blongden
0
260
Building better clients
blongden
0
51
Silex, the micro-framework
blongden
3
550
Other Decks in Technology
See All in Technology
Creating Awesome Change in SmartNews
martin_lover
1
180
Webアプリを Lambdaで動かすまでに考えること / How to implement monolithic Lambda Web Application
_kensh
7
1.1k
大AI時代で輝くために今こそドメインにディープダイブしよう / Deep Dive into Domain in AI-Agent-Era
yuitosato
1
210
50人の組織でAIエージェントを使う文化を作るためには / How to Create a Culture of Using AI Agents in a 50-Person Organization
yuitosato
6
2.9k
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming
tomzoh
0
150
FinOps_Demo
tkhresk
0
120
YOLOv10~v12
tenten0727
3
690
SRE NEXT CfP チームが語る 聞きたくなるプロポーザルとは / Proposals by the SRE NEXT CfP Team that are sure to be accepted
chaspy
1
560
「それはhowなんよ〜」のガイドライン #orestudy
77web
9
2.4k
ゆるくVPC Latticeについてまとめてみたら、意外と奥深い件
masakiokuda
2
220
「家族アルバム みてね」を支えるS3ライフサイクル戦略
fanglang
4
640
ソフトウェア開発現代史: なぜ日本のソフトウェア開発は「滝」なのか?製造業の成功体験とのギャップ #jassttokyo
takabow
3
1.9k
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
The World Runs on Bad Software
bkeepers
PRO
67
11k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Cult of Friendly URLs
andyhume
78
6.3k
How to Ace a Technical Interview
jacobian
276
23k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
A better future with KSS
kneath
239
17k
Six Lessons from altMBA
skipperchong
27
3.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
22
2.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
177
52k
Transcript
Adap%ve(and(evolvable(applica%ons Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 1
What%is%hypermedia? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 2
What%does%it%look%like? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 3
How$can$I$make$use$of$it$in$my$ apps? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 4
There%are%two%types%of%API%client Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 5
Machine(driven Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 6
Human&driven Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 7
Consider)the)web)browser Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 8
The$data Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 9
What%the%client%should%do%next Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 10
Hypermedia*is*defined*by*the* presence*of*applica5on*control* informa5on*embedded*within,*or*as* a*layer*above,*the*presenta5on*of* informa5on —"Roy"Fielding Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 11
<a href=“http://example.org/next”>next</a> Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 12
<form method=“GET” action=“http://example.org/search”> Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 13
<img src=“http://example.org/thing.gif” title=“thing”> Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 14
A"browser"is"designed"so"that"its" hypermedia"affordances"are" controlled"by"humans Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 15
What%about%when%the%consumer%is%a% smartphone/web%applica4on? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 16
Hypermedia*Applica.on*Language { "_links": { "self": { "href": "/orders/1" }, "next":
{ "href": "/orders/2" } }, "_embedded": { "items": [ { "_links": { "self": { "href": "/items/1" } } "price": "10" } ] }, "total": "10" } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 17
HAL$contains$two$types$of$link$affordance Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 18
Outbound(naviga-onal { "_links": { "self": { "href": "http://example.org/thing/2" }, "prev":
{ "href": "http://example.org/thing/1" }, "next": { "href": "http://example.org/thing/3" } } } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 19
Embedded { "_embedded": { "things": [ { ... } ]
} } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 20
This%allows%the%message%to%contain% both%the%data%and%the%context Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 21
Less$logic$in$the$client Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 22
weluse/hyperagent Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 23
{ "_links": { "self": { "href": "http://example.org/thing/2" }, "prev": {
"href": "http://example.org/thing/1" }, "next": { "href": "http://example.org/thing/3" } } } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 24
root.links['next'].fetch().then(function (thing) { // do something with the 'next' item
}); Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 25
Clients(can(adapt(to(change Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 26
The$server$can$evolve$independently$ from$the$client Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 27
URLs Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 28
Avoid&assembling&URLs var link = 'http://example.org/thing/' + id; Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 29
Use$a$link$template$on$the$home$if$you$need$to$convert$an$id$to$a$URL { "_links": { "self": { "href": "/" }, "thing":
{ "href": "http://example.org/thing/{id}", "templated": "true" } } } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 30
Link%templates%with%hyperagent var link = root.link('thing', { id: id }); Adap%ve(and(evolvable(applica%ons(0(Ben(Longden
31
RFC6570()(URI(Templates Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 32
JSON%Schema Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 33
{ "title": "Example Schema", "type": "object", "properties": { "firstName": {
"type": "string" }, "lastName": { "type": "string" }, "age": { "description": "Age in years", "type": "integer", "minimum": 0 } }, "required": ["firstName", "lastName"] } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 34
JSON%Form (or$Angular$Schema$Form) Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 35
Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 36
Three%good%things Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 37
• Hypermedia • Link.templates • JSON.Schema Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 38
One$goal Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 39
Put$control$back$on$the$server Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 40
React&to&change&in&a&posi.ve&way Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 41
Ben$Longden CTO$Inviqa @blongden Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 42