A lecture delivered for "Web Application Development" discipline (MSc studies at Faculty of Computer Science, 'Alexandru Ioan Cuza' University of Iasi, Romania): https://profs.info.uaic.ro/~busaco/teach/courses/wade/web-film.html
5. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
nevoi ale dezvoltatorilor Web
Soluții multi-platformă, slab-conectate
integrare (în timp-real) la nivel de Internet/Web
a aplicațiilor, serviciilor și sistemelor
exemplificare: găsirea ofertelor de servicii,
pe baza localizării geografice a utilizatorului,
în contextul dispozitivelor mobile
7. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
14. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
soluție
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
asigură calitatea dezvoltării și exploatării
aplicațiilor distribuite și/sau paralele:
standardizare, securitate, disponibilitate,
reutilizare, mentenanță etc.
16. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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/
27. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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>
36. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
soa
Paradigmă de dezvoltare a software-ului
care adoptă folosirea de servicii,
oferind funcționalități solicitate de utilizatori
resursele sunt disponibile via o suită de servicii
independente ale căror implementări
nu trebuie să fie cunoscute (black box)
38. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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)
42. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
exemplu autohton: proiectul ubiGuide – 2014
(Ionuț Dănilă & Mihaela Ghimiciu, absolvenți FII)
servicii publice folosite: ABBYY Cloud OCR, AlchemyAPI,
Google Places API, YouTube API,…
biblioteci: Flickr.NET, GART (Geo Augmented Reality Toolkit),
Hammock, TweetSharp etc.
www.youtube.com/watch?v=wygXE6hQ07c
www.slideshare.net/ionutdanila/ubi-guide
43. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
45. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest
serviciile Web pot fi dezvoltate via SOAP și/sau REST
S. Tilkov, REST: Not an Intro (2013)
speakerdeck.com/stilkov/rest-not-an-intro-1
service interface
service logic
business rules
data access
data
resources
hypermedia
represen-
tations:
JSON, XML,…
HTTP
operations
SOAP
XML
messages
WS-*
51. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
reprezentare pe baza unui format de date
formatul reprezentării e desemnat de tipuri MIME
text/html, application/json, application/rdf+xml, image/png
detalii în N.Freed et al., Media Types, 2017
www.iana.org/assignments/media-types/media-types.xhtml
87. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
88. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 de
tag-uri
/tags GET application/atom+xml
Pagina
principală
/ GET application/xml
89. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
GET /bookmarks
200 OK
Content-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ținerea
bookmark-urilor
digest – hash
(SHA-1, SHA-3,…)
90. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
GET /bookmarks/a211528f…bdcf
200 OK
Content-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
92. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
93. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
O resursă poate avea asociate reprezentări
ce 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
98. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 autentificat
http://twitter.com/followers
103. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: metodologie
Integrarea resurselor
via 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
108. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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)
109. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
110. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: privire pragmatică
Folosirea verbelor (metodelor) HTTP pentru efectuarea
de operații asupra unor (colecții de) resurse
resursa
(URI)
POST
(creează)
GET
(accesează)
PUT
(actualizează)
DELETE
(șterge)
/students
creează
un student nou
listează studenții
existenți
actualizează
un set de studenți
șterge toți
studenții
/students/69
(un URL deja
existent)
eroare 🙁
oferă date
despre student
dacă există,
actualizează,
altfel eroare
șterge
studentul
respectiv
111. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 Modified
400 Bad Request, 401 Unauthorized, 403 Forbidden,
404 Not Found, 405 Method Not Allowed
500 Internal Server Error, 503 Service Unavailable
114. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: privire pragmatică
Controlul versiunilor API-ului dezvoltat
“Never release an API without a version
and make the version mandatory.” (Mulloy, 2012)
specificarea versiunii
în antetul HTTP vs. în cadrul URL-ului
https://api.foursquare.com/v2/venues/explore
https://api.twitter.com/1.1/statuses/
http://world.openfoodfacts.org/api/v0/product/0646809521249
122. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: implementare
Studiu de caz:
accesarea datelor publice privitoare
la universul fictiv „Războiul stelelor”
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,…
129. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 concepute
via situl entității furnizoare a serviciului
cheie de acces – API key, consumer key, developer key
130. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 autentifica
pentru a putea fi autorizată să acceseze serviciul
131. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 autentifica
pentru a putea fi autorizată să acceseze serviciul
pot fi impuse diverse politici de acces (permissions):
doar consultare (read), posibilitatea editării etc.
a se studia și inițiativa Open Credentials: opencreds.org
133. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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ției
au loc cu acordul utilizatorului
dacă utilizatorul nu este autentificat, i se vor solicita
informaț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
135. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
pentru preluarea/modificarea datelor de interes,
conform politicilor de acces
136. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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)
138. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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/
140. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
145. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: dezvoltare – openid
OpenID
manieră descentralizată de autentificare a utilizatorului
la nivel de Web pe baza paradigmei SSO – Single Sign On
utilizatorul poate demonstra că deține un URL specific
menit a-l identifica on-line via un ofertant (serviciu)
de identitate digitală (identity provider)
e.g., folosind o aplicație Web socială
146. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: dezvoltare – 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,…
148. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: dezvoltare – openid
OpenID Connect
oferă un nivel vizând identitatea utilizatorului
(identity layer) pe baza protocolului OAuth 2
recurge la formatul JWT (JSON Web Token)
standardizat în RFC 7519 (2015)
openid.net/connect/
149. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rest: dezvoltare – openid
OpenID Connect
biblioteci open source disponibile pentru C, C#, Java,
JavaScript, PHP, Python, Ruby, TypeScript,…
openid.net/developers/libraries/
suport oferit de serverul Web:
mod_auth_openidc – modul Apache
github.com/pingidentity/mod_auth_openidc
L. Crilly, Authenticating API Clients with JWT (2016)
www.nginx.com/blog/authenticating-api-clients-jwt-nginx-plus/