web 2016 (11/13) servicii web. paradigma rest
TRANSCRIPT
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/Tehnologii Web
servicii Web (II)
⊷dezvoltarea de aplicații Web prin REST
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
„Concizia este sora talentului.”
Anton Cehov
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
Există o modalitate de creare/invocarea serviciilor Web fără a recurge la SOAP?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: representational state transfer
Stil arhitectural de dezvoltare a aplicațiilor Webcu focalizare asupra reprezentării datelor
teză de doctorat – Roy Fielding (2000)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse
resursă Web
utilizator având cont în cadrul unui sistem, blog-ul unei persoane, fotografie, flux de știri, program,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse
reprezentare pe baza unui format de date
textual sau binar
exemple tipice: HTML, JSON, PNG, SVG, PDF etc.
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse
reprezentare pe baza unui format de date
formatul reprezentării e desemnat de tipuri MIMEtext/html, text/xml, application/json, image/png
detalii în N.Freed et al., Media Types, 2016http://www.iana.org/assignments/media-types/media-types.xhtml
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse
reprezentările aceleași resurse– desemnate de un URI unic – pot fi multiple
reprezentare1
(HTML)reprezentare2
(Atom)
resursa
URI
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse
fiecare reprezentare a unei resurse are asociat un URL
reprezentare1
(HTML)reprezentare2
(Atom)
resursa
URI
URLURL
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Clienții (e.g., navigatoare Web, roboți, player-e etc.) interacționează cu reprezentările resurselor via verbe„accesează”: GET, „modifică”: POST, „șterge”: DELETE,…
reprezentare1
(HTML)reprezentare2
(Atom)
resursa
URI
URLURL
GET POST GET DELETE
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
GET
scop: accesarea (citirea) unei reprezentări de resursă
nu conduce la modificarea stării serverului (safe)
idempotentă – cereri identice vor conduce la oferireaaceluiași răspuns (aceeași reprezentare)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
HEAD
similară cu GET, dar furnizează doar meta-date(nu oferă reprezentarea propriu-zisă)
e.g., ultima actualizare, lungimea conținutului,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
PUT
actualizează o reprezentare de resursă saueventual creează o resursă la nivel de server Web
uzual, returnează un identificator (URI) al resursei
nu e considerată safe, dar este idempotentă
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
PATCH
actualizarea parțială a unei reprezentări de resursă(PUT nu oferă o asemenea facilitate)
nu este safe și nici idempotentă
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
POST
creează o resursă (uzual, subordonată altei resurse),eventual realizându-se procesări suplimentare
nu este nici safe, nici idempotentă
clientul nu cunoaște a-prioricare va fi URI-ul resursei ce va fi create
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
DELETE
șterge (elimină) o resursă desemnată de un URI
este idempotentă
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
OPTIONS
permite clientului să determine diverse cerințe privitoare la o resursă (e.g., dacă o resursă poate fi ștearsă)
sau facilitățile expuse de un server (de exemplu, suportul oferit de un proxy)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Orice accesare a unei reprezentăriplasează aplicația – ori clientul Web – într-o starece va fi schimbată în urma unui transfer de date
(accesarea altei reprezentări)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
resursa1
reprezentare1
(HTML)
http://blog.info/
resursa2
reprezentare2
(HTML)
http://blog.info/mesaj
resursa3
reprezentare3
(HTML)
http://blog.info/mesaj/edit
resursa4
reprezentare4
(Atom)
http://blog.info/stiri.xml
GET
GET
POST
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
resursa1
reprezentare1
(HTML)
http://blog.info/
resursa2
reprezentare2
(HTML)
http://blog.info/mesaj
resursa3
reprezentare3
(HTML)
http://blog.info/mesaj/edit
resursa4
reprezentare4
(Atom)
http://blog.info/stiri.xml
GET
GET
POST
HATEOAS (Hypermedia As The Engine Of Application State)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Transferul se realizează prin protocolul HTTP
Reprezentarea este modelată conform unui format– e.g., JSON sau XML – și indicată prin tipuri MIME
Adresabilitatea se rezolvă via URI
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Aplicațiile care invocă funcționalități (servicii)consumă reprezentări de resurse – în stilul pull
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Fiecare cerere este considerată independentă,fără a se lua în considerație contextul
stateless server
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Reprezentările de resurse pot fi stocate temporar
caching
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
sta
tele
ss s
erve
r
client
cache
client
cache
adaptare după B. Mulloy (2012)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
sta
tele
ss s
erve
r
client
cache
client
cache
adaptare după B. Mulloy (2012)
fiecare cerere trebuie să conțină toateinformațiile necesare procesării
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
sta
tele
ss s
erve
r
client
cache
client
cache
adaptare după B. Mulloy (2012)
contextul activitățilornu-i stocat de server
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
sta
tele
ss s
erve
r
client
cache
client
cache
adaptare după B. Mulloy (2012)
clientul are dreptul săreutilizeze datele recepționate
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Aplicația Web dezvoltată va fi stratificată
layered system
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
client
state-less
server
state-less
server
state-less
server
loadbalan
cergatewayfire-
wall
adaptare după B. Mulloy (2012)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
client
state-less
server
state-less
server
state-less
server
loadbalan
cergatewayfire-
wall
adaptare după B. Mulloy (2012)
fiecare strat oferăservicii stratelor
vecine
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
client
state-less
server
state-less
server
state-less
server
loadbalan
cergatewayfire-
wall
adaptare după B. Mulloy (2012)
un strat nu poate„vedea” strateneînvecinate
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
client
state-less
server
state-less
server
state-less
server
loadbalan
cergatewayfire-
wall
adaptare după B. Mulloy (2012)
stratele pot încapsula(„ascunde”) sisteme
tradiționale – blackbox
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
client
state-less
server
state-less
server
state-less
server
loadbalan
cergatewayfire-
wall
adaptare după B. Mulloy (2012)
are rol în asigurareaperformanței/
fiabilității
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exemplu
Implementarea unui magazin on-lineoferind dulciuri
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exemplu
Implementarea unui magazin on-lineoferind dulciuri
stilul „clasic” SOAP – conform RPC
operații privind produsele:furnizeazaSortim(), adaugaSortim(), listeazaSortim(), cautaSortim()
operații ce vizează managementul utilizatorilor:furnizeazaUtiliz(), adaugaUtiliz(), stergeUtiliz(), cautaUtiliz(),…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exemplu
Implementarea unui magazin on-lineoferind dulciuri
stilul „nou” REST
tipuri de resurse (Sortim + Utiliz), identificate unic de URIhttp://www.dulciuri.biz/sortim/portocala
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exemplu
Implementarea unui magazin on-lineoferind dulciuri
stilul „nou” REST
tipuri de resurse (Sortim + Utiliz), identificate unic de URIhttp://www.dulciuri.biz/sortim/portocala/albastra
URI intuitiv – “user/SEO friendly”
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exemplu
Serviciu pentru managementul adreselor Web favorite(bookmark-uri), cu posibilitatea atașării de termeni de conținut (tag-uri) și comentarii
social bookmarking
abordări similare: Delicious, Digg, Pocket, Reddit etc.
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exemplu
Serviciu pentru managementul adreselor Web favorite(bookmark-uri), cu posibilitatea atașării de termeni de conținut (tag-uri) și comentarii
funcționalitate de bază: listarea tuturor bookmark-urilor(eventual, filtrate după diverse criterii)
managementul bookmark-urilor:adăugare, editare, ștergere
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: exempluResursa URL Metoda Reprezentare
Bookmark /bookmarks/{md5} GET application/bookmark+xml
Bookmark /bookmarks/{md5} PUT application/bookmark+xml
Bookmark /bookmarks/{md5} DELETE
Lista de adrese
/bookmarks GET application/atom+xml
Lista de utilizatori
/users GET application/atom+xml
Lista detag-uri
/tags GET application/atom+xml
Paginaprincipală
/ GET application/xml
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
GET /bookmarks200 OKContent-type: application/atom+xml
<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom">
<title>Bookmarks</title><entry>
<title>O resursă interesantă</title><link href="/bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf"/>
<summary>http://undeva.info/o-resursa-interesanta
</summary></entry>
<!-- eventual, alte elemente <entry>… --></feed>
răspuns XML (Atom)oferit de serviciu
obținereabookmark-urilor
digest (MD5, SHA1,…)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
GET /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf 200 OKContent-type: application/bookmark+xml
<bookmark><title>O resursă interesantă</title><url>http://undeva.info/o-resursa-interesanta</url><user href="/users/tux">tux</user><tags>
<tag href="/tags/interesting">interesting</tag><tag href="/tags/penguin">penguin</tag>
</tags></bookmark>
preluarea unui bookmark:răspunsul XML oferit de serviciul Web
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
POST /bookmarksContent-type: application/bookmark+xml…201 CreatedLocation: /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
PUT /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcfContent-type: application/bookmark+xml…200 OK
crearea unuibookmark
actualizareaunui bookmark
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Resursele se denumesc folosind URI-uri (URL-uri)
Reprezentările sunt interconectate prin URL-uri
Pot exista intermediari (proxy, cache, porți)între clienți și resurseperformanță, securitate,...
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
Resursele se denumesc folosind URI-uri (URL-uri)
Reprezentările sunt interconectate prin URL-uri
Pot exista intermediari (proxy, cache, porți)între clienți și resurseperformanță, securitate,...
Transferul de date poate fi și asincron – stil Ajax/Comet
avansat
vezi cursul viitor
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest
O resursă poate avea asociate reprezentărice pot fi accesate/alterate via operații HTTP
operații CRUD – Create, Retrieve, Update, Delete
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
Putem adopta o metodologie vizânddezvoltarea de servicii Web via REST?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Divizarea în resurse a setului de dateale problemei
clase tipice de resurse:Utilizatori
Documente – alternative: Fotografii, Produse, Software,…Metadate – e.g., Comentarii, Formate, Locatii, Platforme etc.
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
„Numirea” prin URI a fiecărei resurse
exemplificări:
http://aplicatie.info/Utilizatori/tux
http://aplicatie.info/Documente/pinguini-cu-mere-albastre
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
„Numirea” prin URI a fiecărei resurse
cazuri concrete:accesarea datelor despre o producție cinematografică
http://www.imdb.com/title/tt0401383/
acces la prezentările Slideshare ale utilizatorului busaco
http://www.slideshare.net/busaco/presentations
obținerea listei celor ce urmăresc un utilizator autentificathttp://twitter.com/followers
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Divizarea în resurse a setului de dateale problemei
aceste resurse (object instances) pot fi organizate în colecții (collections) sau depozite (stores)
vezi și D. Denicola, Creating Truly RESTful APIs (2013)www.slideshare.net/domenicdenicola/creating-truly-res-tful-apis
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Divizarea în resurse a setului de dateale problemei
colecție
catalog de resurse gestionate de serverclienții pot propune alterarea colecției
serverul decide care-i rezultatul unei operații
exemple (GitHub): /orgs/openstack/repos, /orgs/openstack/events
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Divizarea în resurse a setului de dateale problemei
depozit
„rezervă” de resurse gestionată de client(inclusiv filtrare, sortare, paginare, accesare meta-date,…)
exemplu (GitHub): /users/openstack/repos?page=2&per_page=3
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Proiectarea reprezentării(lor) acceptatece pot fi trimise de aplicația client
și reprezentării(lor) întoarse spre client
de considerat formate standardHTML, Atom, CSV, JSON(-LD), XML
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Integrarea resurselorvia legături hipertext + formulare
exemplificare (GitHub):“All resources may have one or more *_url properties
linking to other resources. These are meant to provide explicit URLs so that proper API clients don’t need
to construct URLs on their own.”https://developer.github.com/v3/#hypermedia
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Crearea de studii de caz
specificarea condițiilor de eroare și/sau de excepție,inclusiv aspecte privind controlul versiunilor API-ului
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: metodologie
Interacțiunea cu un serviciu Web dezvoltat în stilul RESTse poate face via un API
(Application Programming Interface)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
abordarea MV* tradițională (sans servicii Web)
www.leaseweblabs.com/2013/10/api-first-architecture-fat-vs-thin-server-debate/
brow-ser
prezen-tare
proce-sare
abstrac-tizaredate
pagini <Web/>
HTML, CSS,…
server „gras” (fat)
client „prostuț” (dumb)
frontend backend
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
browsermodern
prezen-tare
proce-sare
abstrac-tizaredate
recurgere la API
JSON, XML, CSV,…
server „slab” (thin)
client „puternic”(HTML5)
aplicație JavaScript(eventual, via app store)
abordarea JavaScript via API
www.leaseweblabs.com/2013/10/api-first-architecture-fat-vs-thin-server-debate/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
sistem de
operare
prezen-tare
proce-sare
abstrac-tizaredate
recurgere la API
JSON, XML, CSV,…
server „slab” (thin)
client „isteț”(smart device)
aplicație nativăC#, Java, Obj-C, Swift,…(uzual, via app store)
aplicații native (desktop și/sau mobile)
www.leaseweblabs.com/2013/10/api-first-architecture-fat-vs-thin-server-debate/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
brow-ser
prezen-tare
proce-sare
abstrac-tizaredate
API
JSONet al.
server „slab” (thin)
client „puternic”și/sau „isteț”
abordarea hibridă
server de prezentare
pagini
HTML
www.leaseweblabs.com/2013/10/api-first-architecture-fat-vs-thin-server-debate/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
StrongLoop APIoperații cu resurse – aici Users
http://myapi-strongdemo.rhcloud.com/explorer/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
StrongLoop APItestarea interactivă a API-ului
vezi http://strongloop.com/strongblog/node-js-
rest-api-openshift-redhat/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
(în loc de) pauză
http://wumo.com/wumo/2016/05/06
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
Aspecte practice de interes pentru dezvoltatori?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
URL-urile desemnând resurse (concepte) de interes trebuie să fie simple și intuitive
utilizarea substantivelor pentru fiecare „lucru”
colecții de resurse (uzual, la plural)/students
identificatori unici pentru membrii unei colecții/students/tuxy (concret) vs. /students/69 (abstract)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
URL-urile desemnând resurse (concepte) de interes trebuie să fie simple și intuitive
structura ierarhică a URL-urilor reprezintă ierarhia resurselor din cadrul domeniului modelat
exemplu (GitHub):/repos/Microsoft/PTVS/commits/e95e15…7a3bf91baff88
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Folosirea verbelor (metodelor) HTTP pentru efectuareade operații asupra unor (colecții de) resurse
resursa(URI)
POST (creează)
GET (accesează)
PUT (actualizează)
DELETE (șterge)
/studentscreează
un student noulistează studenții
existențiactualizează
un set de studențișterge toțistudenții
/students/69
(un URL dejaexistent)
eroareoferă date
despre student
dacă există, actualizează,altfel eroare
ștergestudentulrespectiv
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Tratarea erorilor
folosirea codurilor de stare HTTP
exemple tipice:200 OK, 206 Partial Content
303 See Other400 Bad Request, 403 Forbidden, 404 Not Found
500 Internal Server Error, 503 Service Unavailable
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Tratarea erorilor
mesajele returnate trebuie să includă informații utile
exemplu (GitHub): cod de stare HTTP întors – 404
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3"
}
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Controlul versiunilor API-ului dezvoltat
“Never release an API without a versionand make the version mandatory.” (Mulloy, 2012)
specificarea versiuniiîn antetul HTTP vs. în cadrul URL-ului
avansat
https://api.foursquare.com/v2/venues/search
https://api.twitter.com/1.1/statuses/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Paginarea și oferirea de răspunsuri parțiale
uzual, se folosesc parametri precum limit și offset
/students?limit=33&offset=54
filtrele opționale pot fi delimitate de virgulă/students?fields=name,age,year,email
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
interogări interactive asupra API-ului oferit de The New York Times
http://developer.nytimes.com/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
răspuns în format JSON
diverse (meta-)date oferite de serverul Web
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Paginarea și oferirea de răspunsuri parțiale
exemplificări reale: Delicious – /v1/posts/recent?count=30&tag=web
Twitter – api.twitter.com/1.1/search/tweets.json
?q=…&since_id=24012619984051000&
max_id=250126199840518145&result_type=mixed&count=4
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Eterogenitatea formatelor reprezentărilor întoarse
indicarea formatului în URL via un parametru opțional?alt=json (Google Data)
specificarea formatului acceptat în antetul cererii HTTPAccept: application/json (Digg)
precizarea formatului în numele resursei solicitate/venue.json (Foursquare)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Utilizarea subdomeniilor pentru API-uri diferiteale aceluiași ofertant de servicii
exemplificare:search.twitter.com
stream.twitter.com
api.twitter.com
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: privire pragmatică
Descrierea abstractă a API-urilor REST
OpenAPI Specification (ex-Swagger) – https://openapis.org/
RAML (RESTful API Modeling Language) – http://raml.org/
API Blueprint – https://apiblueprint.org/
detalii în K. Sandoval, Top Specification Formats for REST APIs (2015)http://nordicapis.com/top-specification-formats-for-rest-apis/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
implementare
avansat
un API pentru API-uri la http://theapistack.com/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
Cum pot fi accesatereprezentări de resurse Web prin REST?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare
Biblioteci/API-uri implementând HTTP
libcURL (C; portări Perl, PHP, Ruby,…): curl.haxx.se/libcurl/
Apache HttpComponents (Java): http://hc.apache.org/
haskage (Haskell): http://hackage.haskell.org/package/HTTP
http (pachet Go): http://golang.org/pkg/net/http/
httplib (Python 2) + http.client (Python 3)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare
Biblioteci/API-uri implementând HTTP
LWP (bibliotecă Perl): github.com/libwww-perl/libwww-perl
neon (bibliotecă C): http://www.webdav.org/neon/
rest (Node.js): https://www.npmjs.org/package/rest
RestKit (pentru iOS): http://restkit.org/
RestSharp (pentru .NET): http://restsharp.org/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare – exemplul 1
Invocarea unui serviciu Web de prescurtarea URL-urilor – http://is.gd/
un nou URL prescurtat va fi creat folosind adresahttp://is.gd/create.php?format=xml&url=adresaWeb
alte formate: web (HTML), json,
simple (text)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
Cererea HTTP ce invocă serviciul Web:
GET /create.php?format=xml&url=profs.info.uaic.ro/~busaco HTTP/1.1
Host: is.gd
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
Cererea HTTP ce invocă serviciul Web:
GET /create.php?format=xml&url=profs.info.uaic.ro/~busaco HTTP/1.1
Host: is.gd
Răspunsul obținut, transmis de serverul Web:
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 08 May 2015 12:27:00 GMT
Content-Type: text/xml;charset=UTF-8
<?xml version="1.0" encoding="UTF-8" ?>
<output>
<shorturl>http://is.gd/DBmG2L</shorturl>
</output>
reprezentare POX (Plain Old XML)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
// inițializăm cURL$c = curl_init ();// stabilim URL-ul serviciului Web invocatcurl_setopt ($c, CURLOPT_URL,
'http://is.gd/create.php?format=xml&url=profs.info.uaic.ro/~busaco');// rezultatul cererii va fi disponibil ca șir de caracterecurl_setopt ($c, CURLOPT_RETURNTRANSFER, 1);// preluăm resursa oferită de server (aici, un document XML)$res = curl_exec ($c);// închidem conexiunea cURLcurl_close ($c); // procesăm rezultatul via DOM$doc = new DOMDocument ();$doc->loadXML ($res);// preluăm conținutul elementului <shorturl>$urls = $doc->getElementsByTagName ('shorturl');foreach ($urls as $url) {
echo '<p>Adresa prescurtată este: ' . $url->nodeValue . '</p>';}
apelarea serviciului Web via libcurl (PHP)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare – exemplul 1
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare – exemplul 2
Accesarea datelor publice vizând universul ficțional „Războiul stelelor” (Star Wars)
colecții de resurse: Planets, Spaceships, Vehicles, People, Films, Species
fiecare categorie de resurse are proprietăți specifice e.g., orice instanță de Films include title, director, characters,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare
detalii la https://swapi.co/documentation
{
"name": "Leia Organa",
"height": "150",
"mass": "49",
"hair_color": "brown",
"skin_color": "light",
"eye_color": "brown",
"birth_year": "19BBY",
"gender": "female",
"homeworld": "http://swapi.co/api/planets/2/",
"films": [ "http://swapi.co/api/films/6/",… ],
"species": [ "http://swapi.co/api/species/1/" ],
"vehicles": [
"http://swapi.co/api/vehicles/30/" ],
"starships": [],
"created": "2014-12-10T15:20:09.791000Z",
"edited": "2014-12-20T21:17:50.315000Z",
"url": "http://swapi.co/api/people/5/"
}
răspuns disponibil în format
JSON
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare
Biblioteci/API-uri implementând HTTP
permit dezvoltarea de aplicații desktop, mobile etc.
suport pentru crearea de aplicatii hibride (mash-up-uri) la nivel de server
nu funcționează în navigatorul Web
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare
Biblioteci/API-uri implementând HTTP
permit dezvoltarea de aplicații desktop, mobile etc.
suport pentru crearea de aplicatii hibride (mash-up-uri) la nivel de server
nu funcționează în navigatorul Web
atenție la problemele de securitate ce pot apărea!
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: implementare
Navigatoarele Web actuale
nu necesită o interfață de programare (API) specifică
disponibilitate pe orice platformă
suport pentru REST via obiectul XMLHttpRequest (Ajax)sau folosind WebSocket-uri (HTML5)
vezi cursul viitor
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
ASP.NET MVC + Web API (C# et al.): www.asp.net/web-api
cujoJS, Express, Restify (Node.js)https://nodejsmodules.org/tags/rest
JAX-RS – Java Architecture for RESTful web Serviceshttps://jax-rs-spec.java.net/
Catalyst, Jifty, Mojolicious, REST::Client (Perl)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Restlet (Java): http://restlet.org/
Bottle, Cornice, Django, Eve, Flask, Pecan (Python)
Grape, RESTRack, Ruby on Rails (Ruby)www.ruby-toolbox.com/categories/API_Builders
Epiphany, Fat-Free, Flight, FRAPI, Slim(micro-framework-uri PHP)
…și multe altele
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Servicii publice ce pot fi consumate via REST – exemple:500px, AIDSInfo, Amazon, Basecamp, Blip.tv, DBpedia,
eBay, Ericsson, Facebook, GitHub, Google, LinkedIn,Mastercard, Nodejitsu, Pipl, Quora, SlideShare, Tumblr,…
a se consulta situl ProgrammableWebhttp://tinyurl.com/2ssfc2
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Servicii publice ce pot fi consumate via REST – exemple:500px, AIDSInfo, Amazon, Basecamp, Blip.tv, DBpedia,
eBay, Ericsson, Facebook, GitHub, Google, LinkedIn,Mastercard, Nodejitsu, Pipl, Quora, SlideShare, Tumblr,…
inclusiv API publice disponibile pentru C++, C#, Java,JavaScript, PHP, Python, Objective-C, Ruby,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
studiu de caz: Groupon
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
arhitecturi: exemplu – groupon
Scop: prezentarea de oferte de bunuri de consum
de la o arhitectură monolitică la una adoptând servicii (API-uri) REST
engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
arhitecturi: exemplu – groupon
arhitectură inițială MVC tradițional asigurarea performanței
scalabilitate cu CDN (Content Distribution Network)
și servicii de acces la date
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
arhitecturi: exemplu – groupon
arhitectură eterogenăimplementări separate în funcție de zona geografică
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
arhitecturi: exemplu – groupon
oferirea suportului pentru interacțiuni cu dispozitive mobile
API dedicat, accesul depinzând de localizarea utilizatorului
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
arhitecturi: exemplu – grouponreproiectare
(~20 de aplicații Web separate, independente)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
În cazul aplicațiilor Web sociale,putea utiliza servicii Web
pentru autorizare și autentificare?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(1) înregistrarea aplicației conceputevia situl entității furnizoare a serviciului
cheie de acces – API key, consumer key, developer key
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(2) pe baza acestei chei, aplicația se va putea autentificapentru a putea fi autorizată să acceseze serviciul
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(2) pe baza acestei chei, aplicația se va putea autentificapentru a putea fi autorizată să acceseze serviciul
pot fi impuse diverse politici de acces (permissions):doar consultare (read), posibilitatea editării etc.
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(3) autentificarea și autorizarea aplicațieiau loc cu acordul utilizatorului
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(3) autentificarea și autorizarea aplicațieiau loc cu acordul utilizatorului
dacă utilizatorul nu este autentificat, i se vor solicitainformațiile de autentificare (e.g., nume + parolă),
apoi va putea autoriza aplicația să aiba acces la datevia serviciul Web furnizat
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(4) aplicația apelează funcționalitățile oferite de serviciupentru preluarea/modificarea datelor de interes,
conform politicilor de acces
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare
Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:
(4) aplicația apelează funcționalitățile oferite de serviciu
sesiunea curentă va fi stabilită și menținutăpe baza unor informații de autentificare (auth tokens)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – oauth
Autorizarea unei aplicații să acceseze date private într-un mod standardizat – pe baza tehnologiilor
Web actuale – se poate realiza via OAuth
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – oauth
Autorizarea unei aplicații să acceseze date private într-un mod standardizat – pe baza tehnologiilor
Web actuale – se poate realiza via OAuth
protocol deschis – RFC 6749
OAuth 1.0 (2010), OAuth 2.0 (2012)
http://oauth.net/2/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
securitatea datelor
avansat
procesele de autorizare a accesului la o resursă Webconform Dominik Mengelt (2013)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
securitatea datelor
exemplu concret – Facebook: autorizare cu diverse permisiuni – e.g., age_range, email (acces la adresa de e-mail a unui utilizator),public_profile, read_mailbox, user_birthday, user_friends,
user_likes, user_photos, user_statushttps://developers.facebook.com/docs/facebook-login/permissions/v2.0
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – oauth
Biblioteci disponibile pentru C#, Go, Erlang, Java,JavaScript, Objective-C, Perl, PHP, Python, Ruby, Swift,…
http://oauth.net/code/
pentru PHP: OAuth 2 Server + OAuth 2 Clienta se vizita și https://thephpleague.com/
mod_auth_openidc – modul Apachehttps://github.com/pingidentity/mod_auth_openidc
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – oauth
exemplificare: hello.js – soluție modulară, la nivel de client, vizând autentificarea și
accesarea serviciilor Web via RESTadodson.com/hello.js/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – oauth
Autentificare via servicii Web specifice – exemple:
GitHub – https://developer.github.com/v3/oauth/
Google – developers.google.com/identity/protocols/OAuth2
LinkedIn – https://developer.linkedin.com/docs/oauth2
Live Connect (Microsoft) – http://tinyurl.com/zztr97h
Pinterest – developers.pinterest.com/docs/api/overview/
Stack Exchange – api.stackexchange.com/docs/authentication
Twitter – https://dev.twitter.com/oauth
WordPress – https://developer.wordpress.com/docs/oauth2/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – openid
de experimentat accesul la diverse date (e.g., persoane de contact via Google Contacts API) pe baza OAuth 2.0 Playground
https://developers.google.com/oauthplayground/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – openid
OpenID
manieră descentralizată de autentificare a utilizatoruluila nivel de Web pe baza paradigmei SSO – Single Sign On
utilizatorul poate demonstra că deține un URL specificmenit a-l identifica on-line via un ofertant (serviciu)
de identitate digitală (identity provider)e.g., folosind o aplicație Web socială
http://openid.net/get-an-openid/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – openidFiecare identitate e
desemnată de un URL (stabilit de identity provider):
nume.wordpress.com
google.com/profiles/me
etc.
pentru a-și confirmaidentitatea, utilizatorul
va trebui să se autentifice:nume de cont + parolă,
smart card, date biometrice,
…
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
rest: dezvoltare – openid
OpenID
biblioteci open source disponibilepentru C, C#, Java, JavaScript, PHP, Python, Ruby,…
http://openid.net/developers/libraries/
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
soap vs. rest
SOAP REST
Acțiuni arbitrare (verbe) Acțiuni fixe – HTTP: GET, POST,…
Structuri de date oricât de complexe – inclusiv validare
Operează asupra reprezentărilorde resurse – XML, JSON, HTML
Descriere complexă a serviciului(pe baza WSDL)
Scalabil(mai ușor de extins)
Suport pentru XML messaging Bazat pe URI
Dezvoltare sofisticată: securitate, intermediari, specificații WS-*, interoperabilitate,…
Uzual, mai facil de programat(+disponibilitatea API-urilor)
Specific mediului enterprise(infrastructuri complexe)
Abordare pragmaticăaplicații sociale et al. (Web 2.0)
avansat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/Tehnologii Web
dezvoltare de servicii Web via REST
⊷considerații privind autentificarea & autorizarea
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co/
episodul viitor: suita de tehnologii Ajaxaplicații Web hibride (mash-ups)