dezvoltarea aplicațiilorwebbusaco/teach/courses/wade/... · 2019-10-07 · ga .ro / ~ co nevoiale...
TRANSCRIPT
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Dezvoltarea aplicațiilor Web
⤄servicii Web în stil REST
Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
„Prima calitate a stilului este claritatea.”
Aristotel
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Cum pot fi accesate și procesate resursele– date, informații, cunoștințe –
disponibile pe Web?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
nevoi ale dezvoltatorilor Web
Soluții multi-platformă, slab-conectate
integrare (în timp-real) la nivel de Internet/Weba aplicațiilor, serviciilor și sistemelor
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
nevoi ale dezvoltatorilor Web
Soluții multi-platformă, slab-conectate
integrare (în timp-real) la nivel de Internet/Weba aplicațiilor, serviciilor și sistemelor
exemplificare: găsirea ofertelor de servicii,pe baza localizării geografice a utilizatorului,
în contextul dispozitivelor mobile
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
nevoi ale dezvoltatorilor Web
Soluții multi-platformă, slab-conectate
datele să poată fi descrise pentru a fi „înțelese”de calculatoare și pentru a fi interconectate facil
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
nevoi ale dezvoltatorilor Web
Soluții multi-platformă, slab-conectate
datele să poată fi descrise pentru a fi „înțelese”de calculatoare și pentru a fi interconectate facil
Web “puzzles”inter-conectarea mai multor servicii oferind date de
interes, conform preferințelor utilizatorului
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
nevoi ale dezvoltatorilor Web
Servicii atașabile (pluggable) & versatile
Software as a Service – SaaS
Application Service Provider – ASP
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soluție
Divizarea aplicațiilor în servicii – independente –care se pot compune,
menite a se conecta și orchestra în mod spontanîn cadrul proceselor de afaceri/tehnice
Web component-based software
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soluție
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
oferă suport pentru paradigme de comunicare– bazată pe actualele tehnologii Web –
între aplicații eterogene
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soluție
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
permit(e) localizarea transparentă a serviciilor
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soluție
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
facilitează adăugarea, înlocuirea, eliminareaserviciilor în mod dinamic
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soluție
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
ascund(e) dezvoltatorului detaliile de sistem
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soluție
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
asigură calitatea dezvoltării și exploatăriiaplicațiilor distribuite și/sau paralele:
standardizare, securitate, disponibilitate, reutilizare, mentenanță etc.
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Ce sunt serviciile Web?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
“A service is an abstract resource that represents a capability of performing tasks that form
a coherent functionality from the point of view of providers entities and requesters entities.”
www.w3.org/TR/ws-gloss/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
“A Web service is a software system designed to support interoperable machine-to-machine
interaction over a network.”
www.w3.org/TR/ws-gloss/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Software oferind o funcționalitate specifică
acces la resurse – Instagram, Pinterest, Slideshare, Vimeoagregare de știri – Feedly, Reddit
cartografiere – Google Maps, OpenStreetMap etc.mesagerie instantanee – Snapchat, Telegram, Twilio
procesări – Amazon Rekognition, IBM Watson, Microsoft Azure Cognitive Services, Google TensorFlow…
realizare de statistici Web – e.g., Google Analyticsrețele sociale – Facebook Open Graph, LinkedIn, Twitter
spelling checking – Bing Spell Check, xSpell,…stocare de date – Amazon S3, Dropbox, OneDrive etc.
…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
utilizate – la distanță – de alte aplicații/servicii
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Accesate standardizat via Web
adresare de resurse cu URItransfer de date via HTTP
mesaje adoptând formate de date: CSV, JSON, XML,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Cum am implementa un serviciu?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Implementare standard
recurgerea la servere + framework-uri de aplicații Web
ASP.NET, Django, Node.js, PHP (CodeIgnater, Laravel,…),
Play!, Ruby on Rails,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web
limbaj de marcare – e.g., HTMLstiluri de prezentare a conținutului – CSS
interactivitate via JavaScript (+biblioteci/framework-uri)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web
cererile sunt capt(ur)ate via formulare+ legături hipermedia
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web
utilizatorii umani trebuie să interpreteze etichetele și câmpurile de dialog
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web
serviciul implementat oferă un răspuns(o reprezentare a unei resurse Web)
uzual, un document HTML al cărui conținute transferat la client conform unui protocol: HTTP(S)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Cum obținem răspunsul pentru a fi (re)folositîn programele noastre?
procesarea datelor din codul HTMLWeb scraping
<div class="ct-cs"><input id="exchange_rate" value="4.4155770975" type="hidden">
<input id="fob.log_input_ct" value="" type="hidden">…<table>…</table></div>
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web
Cum obținem răspunsul pentru a fi (re)folositîn programele noastre?
orice modificare în marcajerescrierea programului de preluare a datelor din documentul HTML
???!
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web: caracterizare
Serviciile Web fac explicite specificațiile implicite
datele de intrare și răspunsul pot fi specificate (riguros)via diverse maniere de validare
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web: caracterizare
Utilizate la interacțiunea dintre aplicații
dinamice
lipsa unei cunoașteri a-priori a interacțiuniicu alte aplicații/servicii Web
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web: caracterizare
Puncte finale utilizate pentru procesarea datelor, în manieră publică – eventual, via API-uri deschise
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
servicii web: caracterizare
Dezvoltate pe baza platformelor, arhitecturilor, tehnologiilor și limbajelor curente
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Există un model arhitectural de dezvoltarea serviciilor la nivel de Web?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Arhitectura orientată spre servicii
SOA – Service Oriented Architecture
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Stil arhitectural de proiectare și dezvoltarede aplicații considerate drept servicii
care pot fi invocate de alte aplicații
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Paradigmă de dezvoltare a software-uluicare adoptă folosirea de servicii,
oferind funcționalități solicitate de utilizatori
resursele sunt disponibile via o suită de serviciiindependente ale căror implementărinu trebuie să fie cunoscute (black box)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Componentele sistemului în ansambluau un grad mare de independență (de-coupling)
serviciile trebuie proiectate să interacționeze fără a exista dependențe între acestea
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Serviciile partajează un contract formal
necesitatea unei descrieri formale a serviciului:operații oferite (interfața serviciului)
maniera de interschimb a datelor (cerere + răspuns)maniera de descoperire (service discoverability)
calitatea unui serviciu (SLA – service-level agreement)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Serviciile pot fi recompuse/orchestrateconform cerințelor sau contextului de exploatare
composable servicesreusable services
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soa
Serviciile nu vor depinde de starea comunicării(statelessness)
pentru a efectua o procesare, cantitatea de informațiece trebuie reținută trebuie să fie minimală
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
soade la aplicații Web dezvoltate tradițional
la arhitecturi bazate pe servicii
Jay O’Connor (2014)tech.bellycard.com/blog/migrating-to-a-service-oriented-architecture-soa/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
structura conceptuală stratificată a unei platforme bazate pe servicii Web
protocoale (HTTP, SMTP,…)
servicii de regăsire: UDDI
descrieri de servicii: WSDL
context al serviciului (cine, de ce,…)
servicii de bază (calendar, tranzacții,…)
sist. tradiționale
server(e) backend
API
workflow engine
mașină virtuală
micro-/macro-serv.
ofertant/utilizator de servicii Web
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Există o modalitate pragmatică privinddezvoltarea și invocarea serviciilor Web?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
serviciile Web pot fi dezvoltate via SOAP și/sau RESTS. Tilkov, REST: Not an Intro (2013)
speakerdeck.com/stilkov/rest-not-an-intro-1
service interface
service logic
business rules
data access
data
resources
hypermediarepresen-
tations:JSON, XML,…
HTTP
operations
SOAP
XML messages
WS-*
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
Roy Fieldingteză de doctorat, 2000 (University of California, Irvine)
www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
Viziune complementară de implementare șiutilizare a serviciilor Web – fără SOAP
SOAP Envelope
SOAP Headerbloc antetbloc antet
SOAP Bodybloc corpbloc corpbloc corpbloc corp
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, mesaj al unei persoane, fotografie, flux de știri,
componentă software, set de date (dataset), model 3D,…
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 – formate deschise: HTML, JSON, CSV, 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, application/json, application/rdf+xml, image/png
detalii în N.Freed et al., Media Types, 26 septembrie 2019www.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
resursa
URI
reprezentare2
(JSON)reprezentare1
(HTML)
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
resursa
URI
URLURL
reprezentare2
(JSON)reprezentare1
(HTML)
Dr.
Sab
in B
ura
ga
pro
fs.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,…
resursa
URI
URLURL
GET POST GET DELETE
reprezentare2
(JSON)reprezentare1
(HTML)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
Verbele (acțiunile) sunt stipulate de un protocol
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
HyperText Transfer Protocol
protocol fiabil, de tip cerere/răspuns
port standard de acces: 80
profs.info.uaic.ro/~busaco/teach/courses/web/web-film.html#week2
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
HTTP/1.1
standard Internet: RFC 2616 (1999)
din 2014, definit de RFC 7230—7235
www.w3.org/Protocols/
un tutorial: www.code-maze.com/http-series/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
HTTP/2.0
RFC 7540 (2015)
axat asupra performanței
http2.github.io
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
HTTP/2.0
mesaje binare
reutilizarea conexiunii TCP (a single connection per host)
multiplexare (many parallel streams)
compresia anteturilor – HPACK
trimiterea mesajelor spre client (server push)
implementări: github.com/http2/http2-spec/wiki/Implementations
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
HTTP/3.0
următoarea generație de protocol WebHTTP over QUIC – quicwg.org
recurge la QUIC (Quick UDP Internet Connections)propus de Google, actualmente în curs de
standardizare la IETF (Internet Engineering Task Force)
alte detalii: daniel.haxx.se/http3-explained/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
GET
accesează (preia) o reprezentare a unei resurse
nu conduce la modificarea stării serverului– siguranță (safe)
idempotență (idempotent) – cereri identice vor conduce la oferirea aceluiași răspuns (aceeași reprezentare)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
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
PUT
înlocuiește (actualizează) o reprezentare de resursă saueventual creează o resursă la nivel de server Web
(al cărei URI e deja cunoscut)
uzual, returnează URI-ul resursei
nu e considerată safe, dar este idempotentă
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
PATCH
permite actualizarea parțială a unei reprezentări a unei resurse (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
POST
creează o resursă (uzual, subordonată altei resurse)
opțional, pot fi realizate 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
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
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
restMetoda HTTP Idempotent Safe
GET 🗸 🗸
POST ✗ ✗
PUT 🗸 ✗
PATCH ✗ ✗
OPTIONS 🗸 🗸
HEAD 🗸 🗸
DELETE 🗸 ✗
de studiat și articolul Tamas Piros, RESTful API Design – POST vs PUT vs PATCH, 2018
fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
GET /sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org
&query=SELECT+DISTINCT+%3Fclass%0D%0A
WHERE+%7B%0D%0A++%3Fclass+a+owl%3AClass%0D%0A
%7D+LIMIT+7&format=application%2Fjson&timeout=30000 HTTP/1.1
Host: dbpedia.org
User-Agent: Mozilla/5.0 … Gecko/20100101 …
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en,en-GB;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://dbpedia.org/sparql
Connection: keep-alive
URL encoding
câmpuri-antet și valorile lor
un mesaj HTTP de tip cerere (request) trimis de client (uzual, un browser Web) spre server
aici, o cerere încapsulând o interogare SPARQL către DBpedia
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
HTTP/1.1 200 OK
Date: Web, 09 Oct 2019 07:03:52 GMT
Content-Type: application/json
Content-Length: 691
Connection: keep-alive
Server: Virtuoso/07.20.3232 (Linux) x86_64-generic-linux-glibc25
X-SPARQL-default-graph: http://dbpedia.org
Expires: Web, 09 Oct 2019 07:03:52 GMT
Cache-Control: max-age=604800
…
{ "head": { "link": [], "vars": ["class"] },
"results": { "distinct": false, "ordered": true, "bindings": [
{ "class": { "type": "uri",
"value": "http://dbpedia.org/ontology/Place" }},… ]
} }
un mesaj HTTP de tip răspuns (response) de la serveraici, în format JSON
tipul MIME al reprezentării oferite
câmp-antet nestandardizat
met
a-d
ate
con
țin
ut
(dat
e)
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
HATEOAS (Hypermedia As The Engine Of Application State)
B. Doerrfeld, Designing a True REST State Machine (2018)nordicapis.com/designing-a-true-rest-state-machine/
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
rest
Transferul se realizează prin protocolul HTTP
Reprezentarea este modelată conform unui format– e.g., JSON sau XML – și
indicată prin tipuri MIME (media types)
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
stat
eles
s se
rver
client
cache
client
cache
adaptare după B. Mulloy (2012)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
stat
eles
s se
rver
client
cache
client
cache
adaptare după B. Mulloy (2012)
fiecare cerere trebuie să conțină toateinformațiile necesare procesării
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
stat
eles
s se
rver
client
cache
client
cache
adaptare după B. Mulloy (2012)
contextul activitățilornu-i stocat de server
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
stat
eles
s se
rver
client
cache
client
cache
adaptare după B. Mulloy (2012)
clientul are dreptul săreutilizeze datele recepționate
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
Aplicația Web dezvoltată va fi stratificată
layered system
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)
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
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
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 – black box
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
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, partajare
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Resursa URL Metoda Reprezentare
Bookmark /bookmarks/{hash} GET application/bookmark+xml
Bookmark /bookmarks/{hash} PUT application/bookmark+xml
Bookmark /bookmarks/{hash} 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/a211528f…bdcf"/>
<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 – hash (SHA-1, SHA-3,…)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
GET /bookmarks/a211528f…bdcf200 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/a211528f…bdcf
PUT /bookmarks/a211528f…bdcfContent-type: application/bookmark+xml…200 OK
creareaunui bookmark
înlocuireaunui 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,...
Transferul de date poate fi și asincron – stil Ajax/Comet
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
coO resursă poate avea asociate reprezentărice pot fi accesate/alterate via operații HTTP
CRUD – Create, Retrieve, Update, Delete
Operation SQL HTTP
Create INSERT PUT POST
Read (Retrieve) SELECT GET
Update (Modify) UPDATE PUT POST PATCH
Delete (Destroy) DELETE DELETE
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
caz concret: framework-ul LoopBack – loopback.io/doc/
operații↔REST↔model de implementare↔SQL
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest
Interacțiunea cu un serviciu Web dezvoltatîn stilul REST se poate face via un API (Application Programming Interface)
vezi prelegerea următoare
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Putem adopta o metodologie vizânddezvoltarea de servicii Web (API-uri)
aliniate paradigmei 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, Locații, Platforme etc.
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: metodologie
Divizarea datelor problemei în categorii
cazuri concrete:SoundCloud – developers.soundcloud.com/docs/api/
Tracks Users Me Playlists Groups Comments
StackExchange – api.stackexchange.com
Answers Badges Comments Questions Revisions Tags Users
World of Warcraft – dev.battle.net/io-docs
Characters Guilds Realms Auctions Items
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://web.info/Utilizatori/tux
http://web.info/Documente/pinguini-cu-mere-albastre
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 știrilor referitoare la un subiect de interes
https://www.reddit.com/r/programming/
acces la prezentările SlideShare ale utilizatorului busaco
https://www.slideshare.net/busaco/presentations
obținerea listei celor ce urmăresc un utilizator autentificathttps://twitter.com/followers
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: metodologie
Organizarea resurselor
aceste resurse (object instances) pot fi organizate în colecții (collections) sau depozite (stores)
a se consulta D. Denicola, Creating Truly RESTful APIs (2013)www.slideshare.net/domenicdenicola/creating-truly-res-tful-apis
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: metodologie
Organizarea resurselor
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
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: metodologie
Organizarea resurselor
depozit
„rezervă” de resurse gestionată de client(inclusiv filtrare, sortare, paginare, accesare meta-date,…)
exemplu (GitHub): /users/openstack/repos?page=2&per_page=3
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 formatele standard, comune:CSV – Comma Separated Values
JSON(-LD) – JavaScript Object Notation (-Linked Data) XML – Extensible Markup Language
YAML – Yet Another Markup Language
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.”developer.github.com/v3/#hypermedia
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
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
StrongLoop API (IBM)operații cu resurse specifice – aici Users
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
StrongLoop APItestarea interactivă a API-ului
strongloop.com/strongblog/node-js-rest-api-openshift-redhat/
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)
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
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)
eroare😞oferă date
despre student
dacă există, actualizează,altfel eroare
ștergestudentulrespectiv
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: privire pragmatică
Tratarea erorilor
folosirea codurilor de stare HTTP – httpstatuses.com
exemple tipice:200 OK, 204 No Content, 206 Partial Content
303 See Other, 304 Not Modified400 Bad Request, 401 Unauthorized, 403 Forbidden,
404 Not Found, 405 Method Not Allowed500 Internal Server Error, 503 Service Unavailable
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: privire pragmatică
Tratarea erorilor
mesajele întoarse trebuie să includă informații utile
GitHub – cod de stare HTTP oferit: 404{ "message": "Not Found",
"documentation_url": "https://developer.github.com/v3" }
versusNew York Times (Semantic API) – cod de stare HTTP: 401
{ "message": "No API key found in headers or querystring" }
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)
considerații de interes în articolul J. Curry, Introduction to API Versioning Best Practices (2017):
nordicapis.com/introduction-to-api-versioning-best-practices/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: privire pragmatică
Controlul versiunilor API-ului dezvoltat
specificarea versiunii
în antetul cererii HTTP
Accept: application/vnd.heroku+json; version=3
în unele cazuri, folosind un antet propriu: X-API-Version
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: privire pragmatică
Controlul versiunilor API-ului dezvoltat
specificarea versiunii
în cadrul URL-ului – eventual, ca parametru
https://roads.googleapis.com/v1/nearestRoads
https://ec2.amazonaws.com/?Action=RunInstances&Version=2016-11-15
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: privire pragmatică
Controlul versiunilor API-ului dezvoltat
specificarea versiunii
continuous versioningacces via același URI, indiferent de versiunea curentă
practica preferată (“Cool URIs don’t change”)
nordicapis.com/continuous-versioning-strategy-for-internal-apis/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: privire pragmatică
Paginarea și oferirea de răspunsuri parțiale
de obicei, 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
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
developer.nytimes.com
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
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)
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
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
Apache HttpComponents (Java): hc.apache.org
Guzzle (PHP7): docs.guzzlephp.org/en/stable/
http (pachet Go): golang.org/pkg/net/http/
http.client (Python 3): docs.python.org/3/library/http.client.html
Hyper Reqwest (biblioteci Rust):hyper.rs docs.rs/reqwest
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/
LibHTTP (bibliotecă C): www.libhttp.org
restify (framework Node.js): www.npmjs.com/package/restify
RestKit (macOS + iOS): github.com/RestKit/RestKit
RestSharp (pentru .NET): restsharp.org
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare
Studiu de caz: accesarea datelor publice privitoare
la universul fictiv „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 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
Studiu de caz:preluarea datelor despre artefacte culturale oferite
de Metropolitan Museum of Artmetmuseum.github.io
disponibile liber sub licența Creative Commons Zero
Objects – colecții de resurseObject – include (meta-)date de interes
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare
Studiu de caz:preluarea datelor despre artefacte culturale
API-ul REST oferit poate fi accesat fără autentificarefolosind domeniul collectionapi.metmuseum.org
rezultatele interogărilor sunt disponibile în format JSON
parte componentă a inițiativei Google Arts & Cultureartsandculture.google.com
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare
Studiu de caz:preluarea datelor despre artefacte culturale
pasul #1:căutarea – cerere GET – unor resurse de interes
collectionapi.metmuseum.org/public/collection/v1/search?q=Romania
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare
Studiu de caz:preluarea datelor despre artefacte culturale
pasul #1:căutarea – cerere GET – unor resurse de interes
se obține o colecție JSON de identificatori – objectIDs
{ "total": 47, "objectIDs": [ 98440, 32843,…, 730799 ] }
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare
Studiu de caz:preluarea datelor despre artefacte culturale
pasul #2:accesul – cu GET – la datele vizând o resursă specifică
collectionapi.metmuseum.org/public/collection/v1/objects/32843
objectID
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare
Studiu de caz:preluarea datelor despre artefacte culturale
pasul #2:accesul – cu GET – la datele vizând o resursă specifică
rezultatul reprezintă un obiect JSON încapsulând diverse (meta-)date furnizate de proprietăți: imagini ale
artefactului (primaryImage, additionalImages), proveniența (country, state, region, city), clasificarea (classification),…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare – exemplul 3câmpurile-antet ale cererii HTTP:
Accept: application/json,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-GB;q=0.5
Connection: keep-alive
Host: collectionapi.metmuseum.org
User-Agent: Mozilla/5.0 … Gecko/20100101 Firefox/69.0
câmpurile-antet ale răspunsului furnizat de API:
Access-Control-Allow-Origin: *
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8
Date: Web, 09 Oct 2019 10:38:18 GMT
Transfer-Encoding: chunked
X-CDN: Incapsula
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: implementare – exemplul 3
răspunsul JSON întors de serviciul Web apelat
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ă un API distinct pentru acces via HTTP
disponibilitate pe orice platformă
suport pentru REST prin obiectul XMLHttpRequest (Ajax),Fetch API (HTML5) ori WebSocket API (HTML5)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: dezvoltare – exemplificări
ASP.NET MVC + Web API (C# et al.): www.asp.net/web-api
Express, LoopBack, Sails, Superagent (Node.js)www.npmjs.com/search?q=REST&ranking=popularity
JAX-RS (Java API for RESTful Web Services)github.com/jax-rs
Restlet (Java)restlet.com/open-source/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: dezvoltare – exemplificări
Cornice, Django, Eve, Pecan (Python)
Grape, RESTRack, Ruby on Rails (Ruby)www.ruby-toolbox.com/categories/API_Builders
micro-framework-uri PHP populare:Fat-Free – fatfreeframework.com
Lumen – lumen.laravel.com
Slim – www.slimframework.com
Siler – siler.leocavalcante.dev
a se consulta și github.com/marmelab/awesome-rest
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: dezvoltare
Servicii publice ce pot fi consumate via REST – exemple:AIDSInfo, Amazon, Basecamp, Blip.tv, DBpedia, eBay,
Ericsson, Facebook, GitHub, Google, ISBNdb, LinkedIn, Mastercard, Open Movie Database, Pipl, Quora, Tumblr,
Wikidata,…
de explorat situl ProgrammableWebwww.programmableweb.com/category/all/apis
+lista API-urilor publice
github.com/abhishekbanthia/Public-APIs
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Putea utiliza servicii Web (API-uri)pentru autorizare și autentificare?
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autorizare
Etape esențiale:
obținere cheie de acces 🔑
autentificarea + autorizarea aplicației ⎆⧉
obținerea acordului utilizatorului ⌨⍝👀
apelarea funcționalităților serviciului (via API)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autorizare
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
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autorizare
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 dorit
pot fi impuse diverse politici de acces (permissions):doar consultare (read), posibilitatea editării etc.
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autorizare
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 + parola)
– eventual, folosind 2FA (Two Factor Auth) –,apoi va putea autoriza aplicația să aibă acces la date
via serviciul Web furnizat
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autorizare
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
sesiunea curentă va fi stabilită și menținutăpe baza unor informații de autentificare (auth tokens)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
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 6749OAuth 1.0 (2010), OAuth 2.0 (2012)
oauth.net/2/
L. Spyna, An OAuth 2.0 Introduction for Beginners (2018):itnext.io/an-oauth-2-0-introduction-for-beginners-6e386b19f7a9
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
securitatea datelor
autorizarea prin OAutha aplicației JS Bin
pentru a obține accesul la datele unui utilizator
deținute de GitHub
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
securitatea datelor
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, user_birthday, user_hometown, user_friends, user_likes, user_photos, rsvp_event și altele
developers.facebook.com/docs/facebook-login/permissions/v2.0
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
oauth
Biblioteci (server și/sau client) disponibile pentru C, C++, Go, Erlang, Java, JavaScript, Objective-C, .NET,
Perl, PHP, Python, Ruby, Swift,…
oauth.net/code/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
oauth
Servicii proxy de autentificare/autorizare prin OAuth
Auth0 – auth0.com
Hydra – github.com/ory/hydra
OAuth – oauth.io
Okta – developer.okta.com
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/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
oauth
Autorizare via servicii Web specifice – exemple:
GitHub – developer.github.com/v3/oauth/
Google – developers.google.com/identity/protocols/OAuth2
LinkedIn – developer.linkedin.com/docs/oauth2
Live Connect (Microsoft) – http://tinyurl.com/zztr97h
Stack Exchange – api.stackexchange.com/docs/authentication
Twitter – dev.twitter.com/oauth
WordPress – developer.wordpress.com/docs/oauth2/
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
developers.google.com/oauthplayground/
sesiunea curentă e păstrată într-un jeton (token) JSON
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
bazate pe sesiunea Web via SID (Session IDentifier)
implicit, Web-ul e stateless
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
folosind jetoane (tokens)
token based authentication
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
fără parolă (passwordless)
one-time-use URL
exemplu: Tumblr
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
SSO (Single Sign-On)
autentificarea utilizatorilor în cadrul mai multor aplicații înrudite
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
autentificare socială via alte conturi de utilizator
de exemplu, via rețele sociale sau alte situri Web de încredere
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
2FA (Two-Factor Authentication)
utilizatorul trebuie să ofere minim 2 probe (factors) referitoare la identitatea sa
cunoștințe ori obiecte deținute exclusiv de acea persoană
de studiat și TOTP (Time-Based One-Time Password Algorithm) – RFC 6238: tools.ietf.org/html/rfc6238
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rest: dezvoltare
autentificare multi-factor (2FA): twofactorauth.org
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
autentificare biometrică
bazate pe amprentă (fingerprint recognition)recunoașterea facială sau a unor organe
scanarea ochiului (iris, retină)identificare vocală
analizarea codului genetic (DNA matching)
www.biometricsinstitute.org
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare:
autentificare via dispozitiv hardware
exemplu tipic: smartcard
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
autentificare
Metode de autentificare – privire de ansamblu:
bazate pe sesiunea Webfolosind jetoane (token based authentication)
fără parolă (passwordless)SSO (Single Sign-On)autentificare socială
2FA (Two-Factor Authentication)autentificare biometrică
autentificare via dispozitiv hardware
hackernoon.com/how-do-you-authenticate-mate-f2b70904cc3a
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
openid
OpenID
manieră descentralizată de autentificare a utilizatoruluila nivel de Web pe baza paradigmei SSO
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ă
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
openid
Fiecare identitate a unui utilizator e desemnată de un URL (stabilit de identity provider)
exemplu: steamcommunity.com/openid/id/steamid
pentru a-și confirma identitatea,utilizatorul va trebui să se autentifice:
nume de cont + parolă, smart card, date biometrice,…
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
openid
OpenID Connect
oferă un nivel vizând identitatea utilizatorului (identity layer) pe baza protocolului OAuth 2
formatul de date folosit: JWT – JSON Web Tokenstandardizat de RFC 7519
openid.net/connect/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
openid
OpenID Connect
biblioteci open source disponibilepentru C, C#, Java, JavaScript, PHP, Python, Ruby,…
openid.net/developers/libraries/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
openid
OpenID Connect
suport oferit de serverul Web:
mod_auth_openidc – modul Apachegithub.com/pingidentity/mod_auth_openidc
L. Crilly, Authenticating API Clients with JWT (2016)www.nginx.com/blog/authenticating-api-clients-jwt-nginx-plus/
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Mesaje – de autentificare sau interschimb de informații –
vehiculate în format JWT
resurse de interes + instrumente oferite de jwt.io
jeton JWT
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
openid
În conjuncție cu JWT, a se considera specificațiileJOSE – JSON Object Signing and Encryption:
specificarea semnăturilor digitaleJWS – JSON Web Signature: tools.ietf.org/html/rfc7515
definirea metodelor criptograficeJWE – JSON Web Encryption: tools.ietf.org/html/rfc7516
reprezentarea cheilor criptograficeJWK – JSON Web Key: tools.ietf.org/html/rfc7517
identificarea & înregistrarea algoritmilor criptograficiJWA – JSON Web Algorithms: tools.ietf.org/html/rfc7518
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rezumat
⤄aplicații orientate spre servicii Web în stilul REST
aspecte vizând autorizarea și autentificarea
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
episodul viitor: arhitectura aplicațiilor Webde la API-uri și mashup-uri la proiectare arhitecturală