SlideShare a Scribd company logo
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Tehnologii Web
servicii Web (II)
⊷dezvoltarea de aplicații Web prin REST
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
„Concizia este sora talentului.”
Anton Cehov
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Există o modalitate de creare/invocare
a serviciilor Web fără a recurge la SOAP?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: representational state transfer
Stil arhitectural de dezvoltare a aplicațiilor Web
cu focalizare asupra reprezentării datelor
teză de doctorat – Roy Fielding (2000)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Rezultatul unei procesări conduce la obținerea
unei 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.SabinBuragaprofs.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
textual sau binar
exemple tipice: HTML, JSON, PNG, SVG, PDF etc.
Dr.SabinBuragaprofs.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, text/xml, application/json, image/png
detalii în N.Freed et al., Media Types, 2016
http://www.iana.org/assignments/media-types/media-types.xhtml
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Rezultatul unei procesări conduce la obținerea
unei 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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
fiecare reprezentare a unei resurse are asociat un URL
reprezentare1
(HTML)
reprezentare2
(Atom)
resursa
URI
URLURL
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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 oferirea
aceluiași răspuns (aceeași reprezentare)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
PUT
actualizează o reprezentare de resursă sau
eventual creează o resursă la nivel de server Web
uzual, returnează un identificator (URI) al resursei
nu e considerată safe, dar este idempotentă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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-priori
care va fi URI-ul resursei ce va fi create
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
DELETE
șterge (elimină) o resursă desemnată de un URI
este idempotentă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Orice accesare a unei reprezentări
plasează aplicația – ori clientul Web – într-o stare
ce va fi schimbată în urma unui transfer de date
(accesarea altei reprezentări)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Aplicațiile care invocă funcționalități (servicii)
consumă reprezentări de resurse – în stilul pull
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Fiecare cerere este considerată independentă,
fără a se lua în considerație contextul
stateless server
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Reprezentările de resurse pot fi stocate temporar
caching
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
statelessserver
client
cache
client
cache
adaptare după B. Mulloy (2012)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
statelessserver
client
cache
client
cache
adaptare după B. Mulloy (2012)
fiecare cerere trebuie să conțină toate
informațiile necesare procesării
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
statelessserver
client
cache
client
cache
adaptare după B. Mulloy (2012)
contextul activităților
nu-i stocat de server
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
statelessserver
client
cache
client
cache
adaptare după B. Mulloy (2012)
clientul are dreptul să
reutilizeze datele recepționate
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
Aplicația Web dezvoltată va fi stratificată
layered system
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare după B. Mulloy (2012)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare după B. Mulloy (2012)
fiecare strat oferă
servicii stratelor
vecine
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare după B. Mulloy (2012)
un strat nu poate
„vedea” strate
neînvecinate
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare după B. Mulloy (2012)
stratele pot încapsula
(„ascunde”) sisteme
tradiționale – blackbox
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare după B. Mulloy (2012)
are rol în asigurarea
performanței/
fiabilității
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: exemplu
Implementarea unui magazin on-line
oferind dulciuri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: exemplu
Implementarea unui magazin on-line
oferind 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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: exemplu
Implementarea unui magazin on-line
oferind dulciuri
stilul „nou” REST
tipuri de resurse (Sortim + Utiliz), identificate unic de URI
http://www.dulciuri.biz/sortim/portocala
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: exemplu
Implementarea unui magazin on-line
oferind dulciuri
stilul „nou” REST
tipuri de resurse (Sortim + Utiliz), identificate unic de URI
http://www.dulciuri.biz/sortim/portocala/albastra
URI intuitiv – “user/SEO friendly”
Dr.SabinBuragaprofs.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
social bookmarking
abordări similare: Delicious, Digg, Pocket, Reddit etc.
Dr.SabinBuragaprofs.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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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 de
tag-uri
/tags GET application/atom+xml
Pagina
principală
/ GET application/xml
Dr.SabinBuragaprofs.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/a211528fb5108cddaa4b0d3aeccdbdcf"/>
<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
(MD5, SHA1,…)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
GET /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
POST /bookmarks
Content-type: application/bookmark+xml
…
201 Created
Location: /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
PUT /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
Content-type: application/bookmark+xml
…
200 OK
crearea unui
bookmark
actualizarea
unui bookmark
Dr.SabinBuragaprofs.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 resurseperformanță, securitate,...
avansat
Dr.SabinBuragaprofs.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 resurseperformanță, securitate,...
Transferul de date poate fi și asincron – stil Ajax/Comet
avansat
vezi cursul viitor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest
O resursă poate avea asociate reprezentări
ce pot fi accesate/alterate via operații HTTP
operații CRUD – Create, Retrieve, Update, Delete
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Putem adopta o metodologie vizând
dezvoltarea de servicii Web via REST?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: metodologie
Divizarea în resurse a setului de date
ale problemei
clase tipice de resurse:
Utilizatori
Documente – alternative: Fotografii, Produse, Software,…
Metadate – e.g., Comentarii, Formate, Locatii, Platforme etc.
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: metodologie
Divizarea în resurse a setului de date
ale 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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: metodologie
Divizarea în resurse a setului de date
ale problemei
colecție
catalog de resurse gestionate de server
clienții pot propune alterarea colecției
serverul decide care-i rezultatul unei operații
exemple (GitHub): /orgs/openstack/repos, /orgs/openstack/events
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: metodologie
Divizarea în resurse a setului de date
ale 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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: metodologie
Proiectarea reprezentării(lor) acceptate
ce pot fi trimise de aplicația client
și reprezentării(lor) întoarse spre client
de considerat formate standard
HTML, Atom, CSV, JSON(-LD), XML
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: metodologie
Interacțiunea cu un serviciu Web dezvoltat în stilul REST
se poate face via un API
(Application Programming Interface)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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-
tizare
date
pagini <Web/>
HTML, CSS,…
server „gras”
(fat)
client „prostuț”
(dumb)
frontend backend
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
browser
modern
prezen-
tare
proce-
sare
abstrac-
tizare
date
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.SabinBuragaprofs.info.uaic.ro/~busaco/
sistem
de
operare
prezen-
tare
proce-
sare
abstrac-
tizare
date
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.SabinBuragaprofs.info.uaic.ro/~busaco/
brow-
ser
prezen-
tare
proce-
sare
abstrac-
tizare
date
API
JSON
et 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.SabinBuragaprofs.info.uaic.ro/~busaco/
StrongLoop API
operații cu resurse – aici Users
http://myapi-strongdemo.rhcloud.com/explorer/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
StrongLoop API
testarea interactivă a API-ului
vezi http://strongloop.com/strongblog/node-js-
rest-api-openshift-redhat/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
(în loc de) pauză
http://wumo.com/wumo/2016/05/06
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Aspecte practice de interes
pentru dezvoltatori?
Dr.SabinBuragaprofs.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)
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: privire pragmatică
Tratarea erorilor
folosirea codurilor de stare HTTP
exemple tipice:
200 OK, 206 Partial Content
303 See Other
400 Bad Request, 403 Forbidden, 404 Not Found
500 Internal Server Error, 503 Service Unavailable
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.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
avansat
https://api.foursquare.com/v2/venues/search
https://api.twitter.com/1.1/statuses/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: privire pragmatică
interogări interactive asupra API-ului
oferit de The New York Times
http://developer.nytimes.com/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: privire pragmatică
răspuns în
format JSON
diverse (meta-)date
oferite de serverul Web
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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 HTTP
Accept: application/json (Digg)
precizarea formatului în numele resursei solicitate
/venue.json (Foursquare)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: privire pragmatică
Utilizarea subdomeniilor pentru API-uri diferite
ale aceluiași ofertant de servicii
exemplificare:
search.twitter.com
stream.twitter.com
api.twitter.com
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
implementare
avansat
un API pentru API-uri la http://theapistack.com/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Cum pot fi accesate
reprezentări de resurse Web prin REST?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: implementare – exemplul 1
Invocarea unui serviciu Web de prescurtare
a URL-urilor – http://is.gd/
un nou URL prescurtat va fi creat folosind adresa
http://is.gd/create.php?format=xml&url=adresaWeb
alte formate:
web (HTML), json,
simple (text)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Cererea HTTP ce invocă serviciul Web:
GET /create.php?format=xml&url=profs.info.uaic.ro/~busaco HTTP/1.1
Host: is.gd
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
// inițializăm cURL
$c = curl_init ();
// stabilim URL-ul serviciului Web invocat
curl_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 caractere
curl_setopt ($c, CURLOPT_RETURNTRANSFER, 1);
// preluăm resursa oferită de server (aici, un document XML)
$res = curl_exec ($c);
// închidem conexiunea cURL
curl_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.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: implementare – exemplul 1
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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 Services
https://jax-rs-spec.java.net/
Catalyst, Jifty, Mojolicious, REST::Client (Perl)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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 ProgrammableWeb
http://tinyurl.com/2ssfc2
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
studiu de caz: Groupon
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
arhitecturi: exemplu – groupon
arhitectură eterogenă
implementări separate în funcție de zona geografică
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
arhitecturi: exemplu – groupon
oferirea suportului
pentru interacțiuni cu dispozitive mobile
API dedicat, accesul depinzând de localizarea utilizatorului
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
arhitecturi: exemplu – groupon
reproiectare
(~20 de aplicații
Web separate,
independente)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
În cazul aplicațiilor Web sociale,
putea utiliza servicii Web
pentru autorizare și autentificare?
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.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.
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.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 + parolă),
apoi va putea autoriza aplicația să aiba acces la date
via serviciul Web furnizat
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.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)
avansat
Dr.SabinBuragaprofs.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
avansat
Dr.SabinBuragaprofs.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/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
securitatea datelor
avansat
procesele de autorizare a accesului la o resursă Web
conform Dominik Mengelt (2013)
Dr.SabinBuragaprofs.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, read_mailbox, user_birthday, user_friends,
user_likes, user_photos, user_status
https://developers.facebook.com/docs/facebook-login/permissions/v2.0
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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 Client
a se vizita și https://thephpleague.com/
mod_auth_openidc – modul Apache
https://github.com/pingidentity/mod_auth_openidc
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: dezvoltare – oauth
exemplificare: hello.js – soluție modulară,
la nivel de client, vizând autentificarea și
accesarea serviciilor Web via REST
adodson.com/hello.js/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.info.uaic.ro/~busaco/
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.SabinBuragaprofs.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ă
http://openid.net/get-an-openid/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: dezvoltare – openid
Fiecare identitate e
desemnată de un URL
(stabilit de identity provider):
nume.wordpress.com
google.com/profiles/me
etc.
pentru a-și confirma
identitatea, utilizatorul
va trebui să se autentifice:
nume de cont + parolă,
smart card,
date biometrice,
…
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: dezvoltare – openid
OpenID
biblioteci open source disponibile
pentru C, C#, Java, JavaScript, PHP, Python, Ruby,…
http://openid.net/developers/libraries/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
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ărilor
de 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.SabinBuragaprofs.info.uaic.ro/~busaco/
Tehnologii Web
dezvoltare de servicii Web via REST
⊷considerații privind autentificarea & autorizarea
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
episodul viitor: suita de tehnologii Ajax
aplicații Web hibride (mash-ups)

More Related Content

PDF
Web 2020 09/12: Servicii Web. Paradigma REST
PDF
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
PDF
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
PDF
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
PDF
Sabin Buraga – Dezvoltator Web (...în 2017)
PDF
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
PDF
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
PDF
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
Sabin Buraga – Dezvoltator Web (...în 2017)
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP

What's hot (20)

PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
PDF
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
PDF
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
PDF
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
PDF
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
PDF
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
PDF
Dezvoltator Web?! (varianta 2015)
PDF
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
PDF
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
PDF
CLIW 2017-2018 (10/12) Programare Web. API-uri JavaScript în contextul HTML5 (I)
PDF
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
PDF
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
PDF
WADe 2017-2018 (2/12) Service-based Web Application Development. REST
PDF
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
PDF
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
PDF
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
PDF
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
PDF
Node.js: aspecte esențiale
PDF
Sabin Buraga: Participând la Web
PDF
Ce înseamnă a fi dezvoltator Web (varianta 2014)
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
Dezvoltator Web?! (varianta 2015)
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2017-2018 (10/12) Programare Web. API-uri JavaScript în contextul HTML5 (I)
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
WADe 2017-2018 (2/12) Service-based Web Application Development. REST
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
Node.js: aspecte esențiale
Sabin Buraga: Participând la Web
Ce înseamnă a fi dezvoltator Web (varianta 2014)
Ad

Viewers also liked (19)

PDF
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
PPT
Vin pietroasele
ODT
Schema de tratament pentru samburoase
PDF
Căutarea resurselor Web
PDF
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
PPTX
ANTREC Moldova (ro)
PDF
Brosura horticulturan pomi vie legume tratamente tare 2014
PDF
Suport curs ae dupa un asm verificat de autor
PPT
Pomicultura
PDF
Taierea pomilorfructiferi
PDF
Pomicultura generala si speciala
PDF
Proiect solarii si linii picurare
PDF
Pomicultura pentru toti
PDF
Pomicultura aplicata Nicolae Cepoiu
PDF
Taierea si conducerea vitei de vie pe langa casa
PDF
Taierea pomilor nc
PDF
Lucrarile de taiere la pomii si arbusti fructiferi
PDF
African Americans: College Majors and Earnings
PDF
Visual Design with Data
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Vin pietroasele
Schema de tratament pentru samburoase
Căutarea resurselor Web
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
ANTREC Moldova (ro)
Brosura horticulturan pomi vie legume tratamente tare 2014
Suport curs ae dupa un asm verificat de autor
Pomicultura
Taierea pomilorfructiferi
Pomicultura generala si speciala
Proiect solarii si linii picurare
Pomicultura pentru toti
Pomicultura aplicata Nicolae Cepoiu
Taierea si conducerea vitei de vie pe langa casa
Taierea pomilor nc
Lucrarile de taiere la pomii si arbusti fructiferi
African Americans: College Majors and Earnings
Visual Design with Data
Ad

Similar to Web 2016 (11/13) Servicii Web. Paradigma REST (20)

PDF
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
PDF
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
PDF
Ce înseamnă să fii dezvoltator Web
PDF
Suita de tehnologii HTML5
PDF
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
PDF
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
PDF
CLIW 2014—2015 (12/12): Performanța Web la nivel de client
PDF
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
PDF
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
PDF
Web 2016 (13/13) Securitatea aplicațiilor Web
PDF
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
PDF
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
PDF
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
PDF
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
PDF
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
PDF
Dezvoltarea aplicațiilor Web (7/12): Arhitectura aplicaţilor RDF. Linked Open...
PDF
Dezvoltarea aplicațiilor Web (5/12): Modelul RDF (Resource Description Framew...
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #13): Performanţa apl...
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Ce înseamnă să fii dezvoltator Web
Suita de tehnologii HTML5
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
CLIW 2014—2015 (12/12): Performanța Web la nivel de client
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Web 2016 (13/13) Securitatea aplicațiilor Web
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Dezvoltarea aplicațiilor Web (7/12): Arhitectura aplicaţilor RDF. Linked Open...
Dezvoltarea aplicațiilor Web (5/12): Modelul RDF (Resource Description Framew...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #13): Performanţa apl...

More from Sabin Buraga (18)

PDF
Web 2020 01/12: World Wide Web – aspecte arhitecturale
PDF
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
PDF
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
PDF
STAW 01/12: Arhitectura aplicaţiilor Web
PDF
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
PDF
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
PDF
STAW 04/12: Programare Web: Node.js
PDF
STAW 05/12: Arhitectura navigatorului Web
PDF
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
PDF
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
PDF
STAW 08/12: Programare Web. Suita de tehnologii HTML5
PDF
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
PDF
Sabin Buraga: Dezvoltator Web?! (2019)
PDF
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
PDF
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
PDF
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
PDF
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
PDF
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 04/12: Programare Web: Node.js
STAW 05/12: Arhitectura navigatorului Web
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
Sabin Buraga: Dezvoltator Web?! (2019)
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions

Web 2016 (11/13) Servicii Web. Paradigma REST