rest - hyper media klienter med ramone
TRANSCRIPT
![Page 1: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/1.jpg)
Jørn Wildt, cBrain
REST - Hyper media
klienter med Ramone
![Page 2: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/2.jpg)
Mig?
Jørn Wildt (1970)
Softwareudvikler siden 1985
Open Source udvikler siden 1994 Unix Commander (studietid)
BuDDy (Phd.)
Zikula CMS, tidl. PostNuke (2004 – 2009)
Ramone (2011 - ????)
Ansat hos cBrain (2004 - ...)
Far til Erik (4½ år) og Line (½ år)
Andet – klatring, løb, havkajak, skiløb
![Page 3: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/3.jpg)
REST – Et løfte om …
Skalérbarhed
God performance
Fleksibilitet
Løst koblede servere og klienter
![Page 4: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/4.jpg)
Ramone – en REST/HTTP
klient
Nyt projekt – startet 2011
Open Source
https://github.com/JornWildt/Ramone
Mere om det senere …
![Page 5: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/5.jpg)
Fra WEB Browser til REST
API Tim Bernes-Lee 1990
World Wide Web (HTTP 0.9)
Roy T. Fielding mf. 1997
HTTP 1.1
Roy T. Fielding 2000 (PhD. Afhandling)
REST - REpresentational State Transfer
Fra SOAP til REST 20XX
RESTful Web Services
![Page 6: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/6.jpg)
Denne præsentation …
Fokus på at implementere
”Machine-to-machine” systemer med
Løst koblede,
Frie og uafhængige,
Selvstændige,
Klienter og servere,
Der kan forbedres løbende uden pjat!
Mindre snak om performance og
skalering
![Page 7: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/7.jpg)
REST –En arkitektonisk stilart
for software
Client – Server
Stateless
Layered System
Cacheable
Code On Demand
Uniform Interface
Dekobler ”data leverandører”
og ”data aftagere”
Frihed til uafhængig
udvikling af komponenter og
valg af platforme
![Page 8: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/8.jpg)
REST –En arkitektonisk stilart
for software
Client – Server
Stateless
Layered System
Cacheable
Code On Demand
Uniform Interface
Serveren holder ikke styr på
klienterne og deres tilstand.
Klienten sender selv alt
nødvendig information i hver
forespørgelse.
Skalérbarhed af server
![Page 9: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/9.jpg)
REST –En arkitektonisk stilart
for software
Client – Server
Stateless
Layered System
Cacheable
Code On Demand
Uniform Interface
Netværket mellem klient og
server kan indeholde
alverdens ekstra
komponenter.
Frihed til at forbedre
netværket uden at ændre
klient og server.
![Page 10: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/10.jpg)
REST –En arkitektonisk stilart
for software
Client – Server
Stateless
Layered System
Cacheable
Code On Demand
Uniform Interface
Indbygget support for
caching af resultater fra
netværket.
Bedre performance
![Page 11: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/11.jpg)
REST –En arkitektonisk stilart
for software
Client – Server
Stateless
Layered System
Cacheable
Code On Demand
Uniform Interface
Servere kan levere
eksekverbar kode til klienter.
Bedre performance
Fleksibilitet
![Page 12: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/12.jpg)
REST –En arkitektonisk stilart
for software
Client – Server
Stateless
Layered System
Cacheable
Code On Demand
Uniform Interface
Ensartet og standardiseret
adgang til alle data.
(mere om det lige om lidt)
![Page 13: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/13.jpg)
Uniform interface
Identification of
resources
Manipulation of
resources through
representations
Self-descriptive
messages
Hypermedia as the engine of application
state.
URI /URL
Distribueret og global
navngivning
(modsat tidligere tiders
”link servers”)
![Page 14: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/14.jpg)
Uniform interface
Identification of
resources
Manipulation of
resources through
representations
Self-descriptive
messages
Hypermedia as the engine of application
state.
Abstraktion af data
Frihed til at ændre bagved
liggende implementering
Global fælles forståelse af
data via media types
![Page 15: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/15.jpg)
Uniform interface
Identification of
resources
Manipulation of
resources through
representations
Self-descriptive
messages
Hypermedia as the engine of application
state.
Headers
(operation, host, content-
type, zip-encoding osv.)
Data kan forstås og
manipuleres i netværket
Fri for data gætværk
![Page 16: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/16.jpg)
Uniform interface
Identification of
resources
Manipulation of
resources through
representations
Self-descriptive
messages
Hypermedia as the engine of application
state.
Links og forms
Frihed til at forbedre API
uden koordinering med alle
klienter
Fleksibilitet
![Page 17: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/17.jpg)
Man ser et mønster …
Frihed til uafhængigt at ændre servere
og klienter
Fælles forståelse for data
Skalérbarhed
Performance
Vi kender det fra HTML/browser.
Kan vi få samme effekter for vores API’er?
![Page 18: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/18.jpg)
Hvad er der "normalt” styr på?
Performance
Skalérbarhed
Frihed til uafhængigt at ændre servere
og klienter
Identificerbare ressourcer
Hyper media
Fælles forståelse for data
Media types
![Page 19: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/19.jpg)
Identificerbar ressource
Request (http://api.cdcph.dk/deltagere/1234):
GET /deltagere/1234 HTTP/1.1
Response
Content-Type: application/json
{ navn: ”John”, deltagerNr: 10, id: 1234 }
![Page 20: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/20.jpg)
Knap så identificerbar
ressourceRequest (http://api.cdcph.dk/deltagere):
POST /deltagere?action=read&id=1234
POST /deltagere?action=afmeld&id=1234
Skjult semantik (HTTP tunnelling)
Response
Content-Type: application/json
{ navn: ”John”, deltagerNr: 10, id: 1234 }
![Page 21: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/21.jpg)
Fra handling til ressource
Request 1 (http://api.cdcph.dk/deltagere)
POST /deltagere
{ action = ”tilmeld”, nummer = 1234, … }
Request 2 (http://api.cdcph.dk/deltagere/1234/tilmeldinger)
POST /deltagere/1234/tilmeldinger
{ … }
![Page 22: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/22.jpg)
Barometercheck!
Skift fra mange ukendte handlinger og meget få ressourcer
Til standard handlinger og mange (endnu ukendte) ressourcer
Giver
Fælles forståelse af data-tilgang og dermed
Bliver det
Standardiseret API for ALLE services, og
Færre linjer kode
![Page 23: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/23.jpg)
… REKLAME …https://github.com/JornWildt/Ramone
![Page 24: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/24.jpg)
Standard API / standard C# klient
?
Identificerbare ressourcer
Standard operationer (GET/POST/…)
Request rq = DeltagerUrl.Bind(Session);
Response<Deltager> rs = rq.Get<Deltager>();
Deltager d = rs.Body;
// Alternativt for JSON data
// dynamic deltager = rs.Body;
![Page 25: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/25.jpg)
RESTful URL’er? Nonsens!
http://example.com/examples/1234
http://example.com/examples?id=1234
http://example.com/examples.1234.json
http://example.com/jiourjlw-576-cd
Alle URL’er er skabt lige, og
Ingen URL’er er mere RESTful end andre.
Og strukturen er hamrende ligegyldig!
![Page 26: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/26.jpg)
Prædefinerede stier
Klassisk API dokumentation (Twitter)
GET /statuses/home_timeline
Returns the most recent statuses, including
retweets if they exist …
Herefter og i al evighed er denne
sammenhæng låst.
![Page 27: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/27.jpg)
Navngivne URL’er
RESTful dokumentation
GET {timeline-url}
Returns the most recent statuses, including
retweets if they exist …
Selve URL’en findes først på runtime.
=> Frihed til at ændre informations-struktur
Og hvordan gør vi så det? Lad os se et eksempel …
![Page 28: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/28.jpg)
Twitter 1 – Hvor er mine links?
{
text : ”Hello world”,
user :
{
id : 1234
name : ”John”
}
}
![Page 29: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/29.jpg)
Twitter 2 – Her kunne de være
{
text : ”Hello world”,
user :
{
link : ”http://api.twitter.com/...”,
name : ”John”
}
}
URL ”Navngivning” : ”user / link”.
![Page 30: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/30.jpg)
Hyper media: link relationer
HTML
<a rel=”deltager” href=”…”>Deltager 1</a>
ATOM
<link rel=”deltager” href=”…” title=”Deltager 1” />
=> Tydelig navngivning af URL
![Page 31: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/31.jpg)
Versionering: deltager v1
<deltager>
<navn>John</navn>
<link rel=”adresse”
href=”…”/>
</deltager>
![Page 32: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/32.jpg)
Versionering: deltager v2
<deltager>
<navn>John</navn>
<link rel=”adresse”
href=”…”/>
<link rel=”bedre-adresse”
href=”…”/>
</deltager>
![Page 33: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/33.jpg)
Service-index
<services>
<link rel=”kurser” href=”…”/>
<link rel=”tilmeldinger” href=”…”/>
<link rel=”deltagere” href=”…”/>
</services>
![Page 34: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/34.jpg)
Barometercheck!
Skift fra handlinger til ressourcer,
Fra statiske URL’er til navngivne URL’er, og
Anvendelse af hyper media
Giver Fælles forståelse af data-tilgang
Data som kan findes af alle
Friheden til at serveren kan
○ Ændre informations-struktur (endda servere), og
○ Tilføje nye ressourcer
Uden at opgradere klienter!
![Page 35: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/35.jpg)
… REKLAME …https://github.com/JornWildt/Ramone
![Page 36: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/36.jpg)
Hyper media klient
Navigering via hyper links
Request rq = DeltagerUrl.Bind(Session);
Response<Deltager> rs = rq.Get<Deltager>();
Deltager d = rs.Body;
Adresse a = d.Links.Select(”adresse”)
.Follow(Session)
.Get<Adresse>()
.Body;
![Page 37: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/37.jpg)
Prædefinerede opdateringer
Klassisk API dokumentation (Twitter)
POST statuses/update
Updates the authenticating user's status, also
known as tweeting … parameters are: …
Klient og server for evigt låst fast i denne
sammenhæng.
![Page 38: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/38.jpg)
Dynamiske operationer
Fleksibel dokumentation
{metode}
{url}
{format}
{parameter-1} … {parameter-N}
Updates the authenticating user's status, also known as tweeting …
Alle oplysninger findes på runtime
(men parametre er domain specifikke)
![Page 39: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/39.jpg)
Hyper media: formularer
Klienten kender kun formularens
Identifikation
Parametre
På runtime finder klienten
HTTP metode
URL
Data format
=> Frihed til at forbedre server operationer
![Page 40: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/40.jpg)
Formular v1: URL template
<form id=”deltager-søgning”
hreft=”/deltagere{?dnr}” />
Profilnavn = ”deltager-søgning”
Parametre:
dnr = deltagernummer
![Page 41: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/41.jpg)
Formular v2: POST + redirect
<form id=”deltager-søgning”
href=”/deltagere-search”
method=”POST”
type="app…/…urlencoded"/>
Profilnavn = ”deltager-søgning”
Parametre:
dnr = deltagernummer Uændret
Klientviden!
![Page 42: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/42.jpg)
Server-drevet applikations-
flow<deltager>
<navn>John</navn>
<!-- Findes kun hvis tilmeldt -->
<link rel=”afmeld-her” href=”…”/>
<!-- Findes kun hvis ej betalt -->
<link rel=”betal-her” href=”…”/>
<!-- Findes kun hvis man har adgang -->
<link rel=”persondata” href=”…”/>
</deltager>
![Page 43: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/43.jpg)
Barometercheck!
Skift fra handlinger til ressourcer, og
Anvendelse af Hyper media,
Formularer, og
Server-drevet applikations-flow
Giver Fælles forståelse af data-tilgang,
Data som kan findes af alle
Friheden til at serveren kan○ Ændre informations-struktur (endda servere),
○ Tilføje nye ressourcer, og
○ Styre applikations-flowet
Uden at opgradere klienter!
![Page 44: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/44.jpg)
… REKLAME …https://github.com/JornWildt/Ramone
![Page 45: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/45.jpg)
Hyper media klient
Formularer
IKeyValueForm f
= GetForm(”deltager-søgning”);
f.Value(”dnr”, 1234);
Search s = f.Bind(Session)
.Submit<Search>();
![Page 46: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/46.jpg)
Service kontrakt
En kontrakt som ejes af servicen
Klient Én
unik
Service
Kontrakt
Data
![Page 47: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/47.jpg)
Service beskrivelse
Beskriver URL’er og data
GET /statuses/home_timeline
Parametre: …
Returværdier: …
Er bundet til én implementering
Ingen hyper media
Alt er givet og hardkodet på forhånd
Er svær at genbruge
![Page 48: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/48.jpg)
Fælles standard
ServiceService
Media type
Fælles kontrakt som ikke ejes af server
”Self descriptive messages”
Klient
Mange
ensartede
services
Media type
Data
![Page 49: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/49.jpg)
Media type beskrivelse
Beskriver relationer og data
<link rel=”…” href=”…”/>
Forms parametre: …
Dataformat: …
Er ikke bundet til nogen implementering
Anvender hyper media
Alt bindes samme på runtime
Er klar til genbrug
Et registreret ID ”application/my-domain”
![Page 50: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/50.jpg)
Konklusion …
![Page 51: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/51.jpg)
Et paradigmeskift
Simpel data / smarte klienter
Smart data / simple klienter
Mindre klient/server kobling
Færre klient-opgraderinger
Fred, kærlighed og god karma
![Page 52: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/52.jpg)
Kendte ulemper
Grovkornede operationer
Bruger mere båndbredde (data + metadata)
Manglende værktøjer på klientsiden ...
Et misforstået koncept ...
![Page 53: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/53.jpg)
Det var (næsten) alt …
![Page 54: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/54.jpg)
Kontakt
Jørn Wildt
E-Mail: [email protected]
Twitter: @JornWildt
Blog: soabits.blogspot.com/
LinkedIn: dk.linkedin.com/in/jornwildt
Hjemmeside (gammel): www.elfisk.dk
cBrain: www.cbrain.dk
https://github.com/JornWildt/Ramone
![Page 55: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/55.jpg)
Ramone 1.0
Mange services => én klient
Uniform interface
Identifiable resources
Hyper media
○ Links (og templates)
○ Formularer
Media type codecs
○ XML, JSON, HTML, Multipart, UrlEncoded, ...
○ Domain specifikke
OAuth1 + Basic auth
![Page 56: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/56.jpg)
Læs mere …
![Page 57: REST - Hyper Media klienter med Ramone](https://reader033.vdocuments.site/reader033/viewer/2022052623/559ab7391a28ab71078b4632/html5/thumbnails/57.jpg)
http://bit.ly/cd2012a1