SlideShare a Scribd company logo
Dr.SabinBuragawww.purl.org/net/busaco
Dezvoltarea aplicatiilor Web
de la servicii Web la API-uri deschise
Dr.SabinBuragawww.purl.org/net/busaco
“Prima calitate a stilului este claritatea.”
Aristotel
Dr.SabinBuragawww.purl.org/net/busaco
Care sunt scopurile Web-ului?
Dr.SabinBuragawww.purl.org/net/busaco
Constituirea si interactiunea
cu un spatiu de comunicare inter-umana
partajarea cunostintelor
Dr.SabinBuragawww.purl.org/net/busaco
Constituirea si interactiunea
cu un spatiu de comunicare inter-umana
partajarea cunostintelor
Web social (“Web 2.0”), Web-ul datelor (semantic),…
Dr.SabinBuragawww.purl.org/net/busaco
Exploatarea puterii computationale
accesul la Web se poate realiza
via dispozitive avand resurse reduse
Dr.SabinBuragawww.purl.org/net/busaco
Exploatarea puterii computationale
accesul la Web se poate realiza
via dispozitive avand resurse reduse
Web ubicuu (omniprezent), Web mobil, Web 3D,…
performantaasigurarea scalabilitatii
Dr.SabinBuragawww.purl.org/net/busaco
Cum pot fi accesate & procesate resursele
– date, informatii, cunostinte –
disponibile pe Web?
Dr.SabinBuragawww.purl.org/net/busaco
nevoi ale dezvoltatorilor Web
Solutii multi-platforma, slab-conectate
integrare (in timp-real) la nivel de Internet/Web
a aplicatiilor, serviciilor si sistemelor
Dr.SabinBuragawww.purl.org/net/busaco
nevoi ale dezvoltatorilor Web
Solutii multi-platforma, slab-conectate
integrare (in timp-real) la nivel de Internet/Web
a aplicatiilor, serviciilor si sistemelor
exemplificare: gasirea de resurse Web pe baza localizarii
geografice a utilizatorului, privind ofertele de servicii
multiple disponibile la nivel de dispozitiv mobil
Dr.SabinBuragawww.purl.org/net/busaco
nevoi ale dezvoltatorilor Web
Solutii multi-platforma, slab-conectate
datele sa poata fi descrise pentru a fi “intelese”
de calculatoare si pentru a fi interconectate usor
Dr.SabinBuragawww.purl.org/net/busaco
nevoi ale dezvoltatorilor Web
Solutii multi-platforma, slab-conectate
datele sa poata fi descrise pentru a fi “intelese”
de calculatoare si pentru a fi interconectate usor
exemplu: Web “puzzles”inter-conectarea mai multor
servicii informative (e.g., situri de stiri, blog-uri) conform
preferintelor utilizatorului, pe baza intereselor sale
Dr.SabinBuragawww.purl.org/net/busaco
nevoi ale dezvoltatorilor Web
Servicii atasabile (pluggable) & versatile
Software as a Service – SaaS
Application Service Provider – ASP
Dr.SabinBuragawww.purl.org/net/busaco
Exista un model arhitectural de dezvoltare
a serviciilor la nivel de Web?
Dr.SabinBuragawww.purl.org/net/busaco
solutie
Divizarea aplicatiilor in servicii – independente –
care se pot compune,
menite a se conecta si orchestra in mod spontan
in cadrul proceselor de afaceri/tehnice
Dr.SabinBuragawww.purl.org/net/busaco
solutie
Divizarea aplicatiilor in servicii – independente –
care se pot compune,
menite a se conecta si orchestra in mod spontan
in cadrul proceselor de afaceri/tehnice
Web component-based software
Dr.SabinBuragawww.purl.org/net/busaco
solutie
“The Web is the computer”
Dr.SabinBuragawww.purl.org/net/busaco
solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
ofera suport pentru paradigme de comunicare
– bazata pe actualele tehnologii Web –
intre aplicatii eterogene
Dr.SabinBuragawww.purl.org/net/busaco
solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
permit(e) localizarea transparenta a serviciilor
Dr.SabinBuragawww.purl.org/net/busaco
solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
faciliteaza adaugarea, inlocuirea, eliminarea
serviciilor in mod dinamic
Dr.SabinBuragawww.purl.org/net/busaco
solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
ascund(e) dezvoltatorului detaliile de sistem
Dr.SabinBuragawww.purl.org/net/busaco
solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
asigura calitatea dezvoltarii si exploatarii
aplicatiilor distribuite si/sau paralele:
standardizare, securitate, disponibilitate,
reutilizare, mentenanta facila etc.
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Software oferind o functionalitate specifica
acces la resurse – Delicious, Pinterest, Slideshare, Vimeo
agregare de stiri – Digg, Reddit
cartografiere – Bing Maps, Google Maps, Nokia Maps
mesagerie instantanee – Jabber, Twitter
realizare de statistici – Google Analytics
retele sociale – e.g., Facebook Open Graph Protocol
spelling checking – Spellr.us
stocare de date – Amazon S3, Dropbox, SkyDrive etc.
…
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Software oferind o functionalitate specifica
acces la resurse – Delicious, Pinterest, Slideshare, Vimeo
agregare de stiri – Digg, Reddit
cartografiere – Bing Maps, Google Maps, Nokia Maps
mesagerie instantanee – Jabber, Twitter
realizare de statistici – Google Analytics
retele sociale – e.g., Facebook Open Graph Protocol
spelling checking – Spellr.us
stocare de date – Amazon S3, Dropbox, SkyDrive etc.
…
utilizare – la distanta – de alte aplicatii/servicii
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Accesate standardizat via Web
URI
HTTP
XML si/sau alte formate (e.g., JSON)
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Cum am implementa un serviciu?
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Implementare standard
script-uri CGI sau utilizarea serverelor de aplicatii Web
ASP.NET, JSP, PHP, RoR,…
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Arhitectura generica a unei aplicatii Web
(3-tier application)
Internet
(Web)
Client Server de aplicatii Stocare
(interface) (application) (persistence)
Dr.SabinBuragawww.purl.org/net/busaco
Sponge / Database
Jelly / Business Logic
Custard / Page Logic
Cream / Markup
Fruit / Presentation
C. Henderson, “Scalable Web Architectures”,
Web 2.0 Expo, 2007: iamcal.com/talks/
Dr.SabinBuragawww.purl.org/net/busaco
Sponge / Database
Jelly / Business Logic
Custard / Page Logic
Cream / Markup
Fruit / Presentation
C. Henderson, “Scalable Web Architectures”,
Web 2.0 Expo, 2007: iamcal.com/talks/
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Traditional, aplicatia ofera o interfata-utilizator
disponibilă pe Web
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Traditional, aplicatia ofera o interfata-utilizator
disponibilă pe Web
cererile sunt capt(ur)ate via formulare
+ legaturi hipertext
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Traditional, aplicatia ofera o interfata-utilizator
disponibilă pe Web
cererile sunt capt(ur)ate via formulare
+ legaturi hipertext
utilizatorii umani trebuie sa interpreteze etichetele
si campurile de dialog + raspunsul receptionat
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Cum obtinem raspunsul pentru a fi (re)folosit
in programele noastre?
procesarea datelor din codul HTMLWeb scrapping
<tr><td>valoare</td><td><input name="val" value="0" readonly type="text"></td></tr>
<tr><td>total (cu TVA)</td><td><input name="cutva" value="0" readonly type="text"></td></tr>
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Cum obtinem raspunsul pentru a fi (re)folosit
in programele noastre?
orice modificare în marcajerescrierea programului
de preluare a datelor din documentul HTML
???!
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
Ce-ar fi să indicăm datele de intrare și
răspunsul oferit de serviciul Web
într-un format standardizat?
Dr.SabinBuragawww.purl.org/net/busaco
servicii web
posibile soluții:
XML-RPC
SOAP
POX (Plain Old XML)
JSON (JavaScript Object Notation)
“dialog”
prin XML
Dr.SabinBuragawww.purl.org/net/busaco
Există un model arhitectural de dezvoltare
a serviciilor la nivel de Web?
Dr.SabinBuragawww.purl.org/net/busaco
soa
Arhitectura orientata spre servicii
SOA – Service Oriented Architecture
Dr.SabinBuragawww.purl.org/net/busaco
soa
Arhitectura orientata spre servicii
SOA – Service Oriented Architecture
stil arhitectural de proiectare & dezvoltare de aplicatii
considerate drept servicii
care pot fi invocate de alte aplicatii
Dr.SabinBuragawww.purl.org/net/busaco
soa
Paradigma de dezvoltare a software-ului
care adopta folosirea de servicii,
oferind functionalitati solicitate de utilizatori
Dr.SabinBuragawww.purl.org/net/busaco
soa
Paradigma de dezvoltare a software-ului
care adopta folosirea de servicii,
oferind functionalitati solicitate de utilizatori
resursele sunt disponibile via o suita de servicii
independente ale caror implementari
nu trebuie sa fie cunoscute (black box)
Dr.SabinBuragawww.purl.org/net/busaco
soa
Componentele sistemului in ansamblu
au un grad mare de independenta (de-coupling)
Dr.SabinBuragawww.purl.org/net/busaco
soa
Componentele sistemului in ansamblu
au un grad mare de independenta (de-coupling)
serviciile pot fi recompuse/orchestrate
conform cerintelor
Dr.SabinBuragawww.purl.org/net/busaco
soa
Serviciile sa nu depinda de starea comunicarii
(statelessness)
Dr.SabinBuragawww.purl.org/net/busaco
soa
Serviciile sa nu depinda de starea comunicarii
(statelessness)
cantitatea de informatie specifica unei activitati
ce trebuie retinuta trebuie sa fie minimala
Dr.SabinBuragawww.purl.org/net/busaco
Exista o modalitate pragmatica
privind dezvoltarea & invocarea serviciilor Web?
Dr.SabinBuragawww.purl.org/net/busaco
rest: representational state transfer
Stil arhitectural de dezvoltare a aplicațiilor Web
cu focalizare asupra reprezentării datelor
teza de doctorat a lui Roy Fielding, 2000
Dr.SabinBuragawww.purl.org/net/busaco
rest
Viziune complementara de implementare si
utilizare a serviciilor Web – fara SOAP
Dr.SabinBuragawww.purl.org/net/busaco
rest
Rezultatul unei procesari conduce la obtinerea
unei reprezentari a unei resurse
Dr.SabinBuragawww.purl.org/net/busaco
rest
Rezultatul unei procesari conduce la obtinerea
unei reprezentari a unei resurse
resursa Web
un utilizator avand cont in cadrul unui sistem,
blog-ul unei persoane, fotografia unui utilizator,
flux de stiri, program etc.
Dr.SabinBuragawww.purl.org/net/busaco
rest
Rezultatul unei procesari conduce la obtinerea
unei reprezentari a unei resurse
reprezentare = (X)HTML, JPEG, PNG, PDF, Atom, JSON,…
Dr.SabinBuragawww.purl.org/net/busaco
rest
Rezultatul unei procesari conduce la obtinerea
unei reprezentari a unei resurse
reprezentare = (X)HTML, JPEG, PNG, PDF, Atom, JSON,…
formatul reprezentarii e desemnat de tipuri MIME
text/html, image/png, application/xhtml+xml etc.
Dr.SabinBuragawww.purl.org/net/busaco
rest
Rezultatul unei procesari conduce la obtinerea
unei reprezentari a unei resurse
reprezentarile aceleasi resurse
– desemnate de un URI unic – pot fi multiple
reprezentare1
(XHTML)
reprezentare2
(Atom)
resursa
URI
Dr.SabinBuragawww.purl.org/net/busaco
rest
Rezultatul unei procesari conduce la obtinerea
unei reprezentari a unei resurse
fiecare reprezentare a unei resurse are asociat un URL
reprezentare1
(XHTML)
reprezentare2
(Atom)
resursa
URI
URLURL
Dr.SabinBuragawww.purl.org/net/busaco
rest
Clientii – e.g., navigatoare Web, roboti, player-e –
interactioneaza cu reprezentarile resurselor via verbe
(“acceseaza”: GET, “modifica”: POST, “sterge”: DELETE,…)
reprezentare1
(XHTML)
reprezentare2
(Atom)
resursa
URI
URLURL
GET POST GET DELETE
Dr.SabinBuragawww.purl.org/net/busaco
rest
Verbele (actiunile) sunt stipulate de protocolul HTTP
GET
scop: accesarea (citirea) unei reprezentari de resursa
nu conduce la modificarea starii serverului (safe)
idempotenta – cereri identice vor conduce la returnarea
aceluiasi raspuns (aceeasi reprezentare)
Dr.SabinBuragawww.purl.org/net/busaco
rest
Verbele (actiunile) sunt stipulate de protocolul HTTP
PUT
actualizeaza o reprezentare de resursa sau
eventual creeaza o resursa la nivel de server Web
uzual, returneaza un identificator (URI) al resursei
nu e considerata safe, dar este idempotenta
Dr.SabinBuragawww.purl.org/net/busaco
rest
Verbele (actiunile) sunt stipulate de protocolul HTTP
POST
creeaza o resursa (uzual, subordonata altei resurse)
nu este nici safe, nici idempotenta
utilizata cand clientul nu cunoaste a-priori
care va fi URI-ul resursei ce va fi create
Dr.SabinBuragawww.purl.org/net/busaco
rest
Verbele (actiunile) sunt stipulate de protocolul HTTP
DELETE
sterge (elimina) o resursa desemnata de un URI
este idempotenta
Dr.SabinBuragawww.purl.org/net/busaco
rest
Orice accesare a unei reprezentari
plaseaza aplicatia – ori clientul Web – intr-o stare
ce va fi schimbata in urma unui transfer de date
(accesarea altei reprezentari)
Dr.SabinBuragawww.purl.org/net/busaco
resursa1
reprezentare1
(XHTML)
http://blog.info/
resursa2
reprezentare2
(XHTML)
http://blog.info/mesaj
resursa3
reprezentare3
(XHTML)
http://blog.info/mesaj/edit
resursa4
reprezentare4
(Atom)
http://blog.info/stiri
GET
GET
POST
Dr.SabinBuragawww.purl.org/net/busaco
resursa1
reprezentare1
(XHTML)
http://blog.info/
resursa2
reprezentare2
(XHTML)
http://blog.info/mesaj
resursa3
reprezentare3
(XHTML)
http://blog.info/mesaj/edit
resursa4
reprezentare4
(Atom)
http://blog.info/stiri
GET
GET
POST
HATEOAS (Hypermedia As The Engine Of Application State)
Dr.SabinBuragawww.purl.org/net/busaco
rest
Transferul se realizeaza prin protocolul HTTP
Reprezentarea este modelata in XML
(sau alt format) si indicata prin tipuri MIME
Adresabilitatea se rezolva via URI
Dr.SabinBuragawww.purl.org/net/busaco
rest
Aplicatiile care invoca functionalitati (servicii)
consuma reprezentari de resurse – in stilul pull
Dr.SabinBuragawww.purl.org/net/busaco
Fiecare cerere este considerata independenta,
fara a se lua in consideratie contextul
stateless server
rest
Dr.SabinBuragawww.purl.org/net/busaco
Reprezentarile de resurse pot fi stocate temporar
caching
rest
Dr.SabinBuragawww.purl.org/net/busaco
statelessserver
client
cache
client
cache
adaptare dupa B. Mulloy (2012)
Dr.SabinBuragawww.purl.org/net/busaco
statelessserver
client
cache
client
cache
fiecare cerere
trebuie sa contina
toate informatiile
necesare procesarii
adaptare dupa B. Mulloy (2012)
Dr.SabinBuragawww.purl.org/net/busaco
statelessserver
client
cache
client
cache
contextul activitatilor
nu-i stocat de server
adaptare dupa B. Mulloy (2012)
Dr.SabinBuragawww.purl.org/net/busaco
statelessserver
client
cache
client
cache
adaptare dupa B. Mulloy (2012)
clientul are dreptul
sa reutilizeze datele
receptionate
Dr.SabinBuragawww.purl.org/net/busaco
Aplicatia Web dezvoltata va fi stratificata
layered system
rest
Dr.SabinBuragawww.purl.org/net/busaco
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare dupa B. Mulloy (2012)
Dr.SabinBuragawww.purl.org/net/busaco
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare dupa B. Mulloy (2012)
fiecare strat ofera
servicii stratelor
vecine
Dr.SabinBuragawww.purl.org/net/busaco
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare dupa B. Mulloy (2012)
un strat nu poate
“vedea” strate
neinvecinate
Dr.SabinBuragawww.purl.org/net/busaco
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare dupa B. Mulloy (2012)
stratele pot incapsula
(“ascunde”) sisteme
traditionale – blackbox
Dr.SabinBuragawww.purl.org/net/busaco
client
state-
less
server
state-
less
server
state-
less
server
load
balan
cer
gatewayfire-
wall
adaptare dupa B. Mulloy (2012)
are rol in asigurarea
performantei/
fiabilitatii
Dr.SabinBuragawww.purl.org/net/busaco
rest: exemplu
Serviciile puse la dispozitie de Delicious
managementul adreselor Web favorite (bookmark-uri),
cu posibilitatea atasarii de termeni de continut (tag-uri)
si comentarii
social bookmarking
https://delicious.com/developers
Dr.SabinBuragawww.purl.org/net/busaco
rest: exemplu
Serviciile puse la dispozitie de Delicious
functionalitate de baza:
listarea tuturor bookmark-urilor
(eventual, filtrate dupa diverse criterii)
managementul bookmark-urilor:
adaugare, editare, stergere
Dr.SabinBuragawww.purl.org/net/busaco
rest: exemplu
Resursa URL Metoda Reprezentare
Bookmark /bookmarks/{md5} GET application/bookmark+xml
Bookmark /bookmarks/{md5} PUT application/bookmark+xml
Bookmark /bookmarks/{md5} DELETE
Lista de
bookmark-uri
/bookmarks GET application/atom+xml
Lista de utilizatori /users GET application/atom+xml
Lista de tag-uri
(termeni de
continut)
/tags GET application/atom+xml
Pagina principala / GET application/delicious+xml
Dr.SabinBuragawww.purl.org/net/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 resursa interesanta</title>
<link
href="/bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf"/>
<summary>
http://undeva.info/o-resursa-interesanta
</summary>
</entry>
<!-- eventual, alte elemente <entry>… -->
</feed>
raspuns XML (Atom)
oferit de serviciul Delicious
digest MD5
obtinerea
bookmark-urilor
Dr.SabinBuragawww.purl.org/net/busaco
GET /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
200 OK
Content-type: application/bookmark+xml
<bookmark>
<title>O resursa interesanta</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 dat de serviciul Delicious
Dr.SabinBuragawww.purl.org/net/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www.purl.org/net/busaco
rest
Resursele sunt numite folosind URI-uri (URL-uri)
Reprezentarile sunt interconectate prin URL-uri
Pot exista intermediari (proxy, cache, porti)
intre clienti si resurseperformanta, securitate,...
Transferul de date poate fi si asincron – stil Ajax/Comet
Dr.SabinBuragawww.purl.org/net/busaco
rest
O resursa poate avea asociate reprezentari XML
(XML, JSON, eventual in alte formate de date)
ce pot fi accesate/alterate via operatii HTTP
operatii CRUD – Create, Retrieve, Update, Delete
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Divizarea in resurse a setului de date
ale problemei
clase tipice de resurse:
Utilizator
Document – alternative: Fotografie, Produs, Software,…
Metadata – e.g., Comentariu, Format, Locatie, Platforma etc.
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Numirea prin URI a fiecarei resurse
exemplificari:
http://aplicatie.info/Utilizator/tux
http://aplicatie.info/Document/pinguini-cu-mere-albastre
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Numirea prin URI a fiecarei resurse
cazuri concrete:
insemnarile etichetate cu fii disponibile pe un blog
http://fiistudent.wordpress.com/tag/fii/
accesarea datelor despre o productie cinematografica
http://www.imdb.com/title/tt0401383/
obtinerea listei utilizatorilor ce urmaresc o persoana
http://twitter.com/followers
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Numirea prin URI a fiecarei resurse
cazuri concrete:
acces la prezentarile Slideshare ale utilizatorului busaco
http://www.slideshare.net/busaco/presentations
bookmark-urile cu tag-ul web ale utilizatorului busaco
http://delicious.com/busaco/web
efectuarea actiunii de editare a unui document XWiki
http://www.info.uaic.ro/bin/edit/Students/Timetable
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Interactiunea cu un serviciu Web dezvoltat in stilul REST
se face via un API (Application Programming Interface)
pentru exemple de bune practici, a se consulta
http://www.restapitutorial.com/
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Proiectarea reprezentarii(lor) acceptate
ce pot fi trimise de aplicatia client
si reprezentarii(lor) intoarse spre client
de considerat formatele standard – e.g., HTML, Atom
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Integrarea resurselor
via legaturi hipertext + formulare
Dr.SabinBuragawww.purl.org/net/busaco
rest: metodologie
Crearea de studii de caz
specificarea conditiilor de eroare si/sau de exceptie,
inclusiv aspecte privind controlul versiunilor API-ului
Dr.SabinBuragawww.purl.org/net/busaco
Cum pot fi accesate reprezentari de resurse Web
prin REST?
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Biblioteci/API-uri implementând HTTP
libcURL (C, cu portări pentru Perl, PHP, Ruby,…)
libwww (C, Perl)
httplib (Python)
Net:HTTP (Ruby)
RestSharp (C#)
etc.
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Studiu de caz: invocarea unui serviciu Web
de prescurtare de URL-uri – 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www.purl.org/net/busaco
Cererea HTTP ce invoca serviciul Web prin REST:
GET /create.php?format=xml&url=profs.info.uaic.ro/~busaco HTTP/1.1
Host: is.gd
Raspunsul obtinut, transmis de serverul Web:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 15 May 2012 07:48:18 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www.purl.org/net/busaco
// initializam 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 sir de caractere
curl_setopt ($c, CURLOPT_RETURNTRANSFER, 1);
// preluam resursa oferita de server (aici, un document XML)
$res = curl_exec ($c);
// inchidem conexiunea cURL
curl_close ($c);
// procesam rezultatul via DOM
$doc = new DOMDocument ();
$doc->loadXML ($res);
// preluam continutul elementului <shorturl>
$urls = $doc->getElementsByTagName ('shorturl');
foreach ($urls as $url) {
echo '<p>Adresa prescurtata este: ' . $url->nodeValue . '</p>';
}
apelarea serviciului
Web REST via PHP
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Studiu de caz: accesarea celor mai recente mesaje
disponibile pe Twitter
se recurge la URL-ul
http://twitter.com/statuses/public_timeline.json
pentru a obtine mesajele publice
in format JSON (JavaScript Object Notation)
detalii la https://dev.twitter.com/docs/api
Dr.SabinBuragawww.purl.org/net/busaco
HTTP/1.1 200 OK
Date: Tue, 15 May 2012 07:03:27 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 40860
[ {
...
"created_at": "Tue May 15 07:03:23 +0000 2012",
"truncated": false,
"retweet_count": 0,
"retweeted": false,
"in_reply_to_user_id": null,
"user": {
"name": "Tuxy Pinguinescu",
"location": "South Pole",
"created_at": "Wed Oct 21 06:33:14 +0000 2010",
"lang": "en",
"followers_count": 133374,
...
},
"in_reply_to_status_id": null
} ]
raspuns in
format JSON
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Biblioteci/API-uri implementând HTTP
permit dezvoltarea de aplicații desktop, mobile etc.
suport pentru crearea de mash-up-uri la nivel de server
nu funcționează în navigatorul Web
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Biblioteci/API-uri implementând HTTP
permit dezvoltarea de aplicații desktop, mobile etc.
suport pentru crearea de mash-up-uri la nivel de server
nu funcționează în navigatorul Web
atentie la problemele de securitate ce pot aparea!
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Navigatoarele Web actuale
nu necesită o interfață de programare (API) specifică
disponibilitate pe orice platforma
suport pentru REST via obiectul XMLHttpRequest (Ajax)
dependența de implementarea la nivel de browser
Dr.SabinBuragawww.purl.org/net/busaco
rest: implementare
Exemplificare recurgand la biblioteca jQuery (JavaScript):
jQuery.ajax ({ // executa o cerere POST pentru invocarea serviciului Web
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://undeva.info/ServiciuWeb/Resursa",
data: "{…}", // datele de intrare trimise serviciului
dataType: "json", // asteptam raspunsul in format JSON
success: function(data) { // functie apelata la transfer cu succes
$('.rezultat').html(data); // preluam datele, convertindu-le in HTML
}
});
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
ASP.NET MVC (C#)
JAX-RS – Java Architecture for RESTful web Services
Jifty (Perl)
neon (C)
Restlet (Java)
RIP – REST in Python
Ruby on Rails (Ruby)
Recess, Symfony, Tonic, Zend Framework (PHP)
etc.
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Servicii publice ce pot fi consumate via REST – exemple:
500px, Amazon, Basecamp, Blip.tv, eBay, Ericsson,
Facebook, GitHub, Google, Klout, LinkedIn, Muselius,
Netflix, OpenSocial, Scribd, SlideShare, TripIt, Yahoo! etc.
4892 API-uri specifice (9 octombrie 2012)
vezi si http://tinyurl.com/2ssfc2
disponibile pentru C++, C#, JavaScript, Java,
PHP, Python, Objective-C, Ruby,…
Dr.SabinBuragawww.purl.org/net/busaco
testarea de API-uri Web cu hurl.it
accesarea
serviciului Web
oferit de GitHub
JSON
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(1) inregistrarea aplicatiei concepute
via situl entitatii furnizoare a serviciului
cheie de acces – API key, consumer key
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(2) pe baza acestei chei, aplicatia se va putea autentifica
pentru a putea fi autorizata sa acceseze serviciul
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(2) pe baza acestei chei, aplicatia se va putea autentifica
pentru a putea fi autorizata sa acceseze serviciul
pot fi impuse diverse politici de acces (permissions):
doar consultare (read), posibilitatea editarii etc.
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(3) autentificarea si autorizarea aplicatiei
au loc cu acordul utilizatorului
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(3) autentificarea si autorizarea aplicatiei
au loc cu acordul utilizatorului
daca utilizatorul nu este autentificat, i se vor solicita
informatiile de autentificare (e.g., nume + parola),
apoi va putea autoriza aplicatia sa aiba acces la date
via serviciul Web furnizat
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(4) aplicatia apeleaza metodele oferite de serviciu
pentru preluarea/modificarea datelor de interes,
conform politicilor de acces
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare
Pasi uzuali de urmat pentru implementarea unei aplicatii
ce va invoca un serviciu Web pe baza unui API public:
(4) aplicatia apeleaza metodele oferite de serviciu
sesiunea curenta va fi stabilita si mentinuta
pe baza unor informatii de autentificare (auth tokens)
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare – oauth
Autorizarea securizata a unei aplicatii sa acceseze
date private intr-un mod standardizat
se poate realiza via OAuth
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare – oauth
Autorizarea securizata a unei aplicatii sa acceseze
date private intr-un mod standardizat
se poate realiza via OAuth
protocol deschis
OAuth 1.0 – RFC 5849 (2010), OAuth 2.0 (in lucru)
http://oauth.net/
http://hueniverse.com/oauth/
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare – oauth
Exemplificari concrete:
Evernote, Facebook, Google, Ohloh, OpenSocial,
Photobucket, TripIt, Twitter, Vimeo, Windows Live,
Yahoo!, Yammer,...
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare – openid
OpenID
mecanism descentralizat de autentificare a utilizatorului
la nivel de Web pe baza paradigmei SSO – Single Sign On
via un ofertant (serviciu) de identitate (identity provider),
utilizatorii pot sa-si gestioneze prezente online multiple
http://openid.net/
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare – openid
OpenID
fiecare identitate e desemnata de un URL (stabilit de
identity provider): me.yahoo.com, nume.wordpress.com,
google.com/profiles/nume, launchpad.net/~nume etc.
pentru a-si confirma identitatea,
utilizatorul va trebui sa se autentifice:
nume de cont + parola, smart card, date biometrice,…
Dr.SabinBuragawww.purl.org/net/busaco
rest: dezvoltare – openid
OpenID
Biblioteci open source disponibile
pentru C#, Java, Perl, PHP, Python, Ruby,…
http://openid.net/developers/libraries/
http://www.janrain.com/openid-enabled
Dr.SabinBuragawww.purl.org/net/busaco
Cum se pot combina date
oferite de mai multe servicii Web?
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups
Combinarea – la nivel de client și/sau server –
a datelor ce provin din surse (situri) multiple,
oferindu-se o funcționalitate/experiență nouă
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups
Se bazează pe fluxuri RSS/Atom,
servicii Web, API-uri publice,…
“curentul” SaaS (Software As A Service)
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups
combinare
utilizarea de surse de date multiple
poate avea caracter multidimensional:
subiect de interes + locație geografică + moment de timp
Yahoo! music search + Google maps + Eventful
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups
vizualizare
pot fi adoptate diverse tehnici de vizualizare (prezentare)
a datelor: cartografică, tag cloud-uri, tridimensională,…
Twitter + Google EarthTwittEarth
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups
agregare
gruparea datelor provenite din mai multe surse
și analizarea lor: statistici, clasificări, predicții,…
e.g., folosind data mining se pot releva
aspecte “ascunse” ale datelor procesate
Dr.SabinBuragawww.purl.org/net/busaco
instrumente
(GUI tools)
biblioteci de dezvoltare
(libraries)
interfete de programare
(API-uri)
surse de date (data feeds)
platforme
Dr.SabinBuragawww.purl.org/net/busaco
instrumente
(GUI tools)
biblioteci de dezvoltare
(libraries)
interfete de programare
(API-uri)
surse de date (data feeds)
platforme
RSS, geoRSS,
microformate,
RDFa,…
Dr.SabinBuragawww.purl.org/net/busaco
instrumente
(GUI tools)
biblioteci de dezvoltare
(libraries)
interfete de programare
(API-uri)
surse de date (data feeds)
platforme
privind
fluxurile
RSS/Atom
specifice
serviciilor
publice
Dr.SabinBuragawww.purl.org/net/busaco
instrumente
(GUI tools)
biblioteci de dezvoltare
(libraries)
interfete de programare
(API-uri)
surse de date (data feeds)
platforme
framework-uri
Web oferite de
organizatii
Dr.SabinBuragawww.purl.org/net/busaco
instrumente
(GUI tools)
biblioteci de dezvoltare
(libraries)
interfete de programare
(API-uri)
surse de date (data feeds)
platforme
medii de
dezvoltare
Web
Dr.SabinBuragawww.purl.org/net/busaco
instrumente
(GUI tools)
biblioteci de dezvoltare
(libraries)
interfete de programare
(API-uri)
surse de date (data feeds)
platforme
Facebook,
Google App Engine,
WordPress,…
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups: aspecte de interes
performanță: scalabilitatea & latența
limite ale API-urilor + existența versiunilor multiple
drepturi de autor asupra datelor & licențiere
securitate: abuz, confidențialitate, încredere etc.
monetizare
lipsa unei interoperabilități reale între platforme
Dr.SabinBuragawww.purl.org/net/busaco
mash-ups: dezvoltare
API-uri publice & exemple disponibile la
ProgrammableWeb.com
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Ingineria dezvoltarii de servicii Web prin REST
Brian Mulloy, Web API Design, Apigee, 2012
http://offers.apigee.com/web-api-design-ebook/
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
URL-urile desemnand resurse (concepte) de
interes trebuie sa fie simple si intuitive
utilizarea substantivelor pentru fiecare “lucru”
colectii de resurse (uzual, la plural)
/students
identificatori unici pentru membrii unei colectii
/students/tuxy (concret) vs. /students/69 (abstract)
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Folosirea verbelor (metodelor) HTTP pentru efectuarea
de operatii asupra unor (colectii de) resurse
resursa
(URI)
POST
(creeaza)
GET
(acceseaza)
PUT
(actualizeaza)
DELETE
(sterge)
/students
creează
un student nou
listeaza studentii
existenti
actualizeaza
un set de studenti
sterge toti
studentii
/students/69
(un URL deja
existent)
eroare 
ofera date
despre student
daca exista,
actualizeaza,
altfel eroare
sterge
studentul
respectiv
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Tratarea erorilor
folosirea codurilor de stare HTTP
(200 – OK, 400 – Bad Request, 500 – Internal Server Error)
mesajele returnate trebuie sa includa informatii utile
exemplu: Twilio – cod de stare intors: 401
{ "status" : "401", "message":"Authenticate", "code": 20003,
"more info": "http://www.twilio.com/docs/errors/20003" }
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Controlul versiunilor API-ului dezvoltat
“Never release an API without a version
and make the version mandatory.” (Mulloy, 2012)
specificarea versiunii
in antetul HTTP vs. in cadrul URL-ului
salesforce.com – /services/data/v20.0/sobjects/Account
Facebook – ?v=1.0
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Paginarea & oferirea de raspunsuri partiale
uzual, se folosesc parametri precum limit si offset
/students?limit=33&offset=74
filtrele optionale (e.g., in contextul faceted search)
pot fi delimitate de virgula
/students?fields=name,age,year,email
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Eterogenitatea formatelor reprezentarilor intoarse
indicarea via un parametru optional in URL
?alt=json (Google Data)
specificarea formatului acceptat in antetul cererii HTTP
Accept: application/json (Digg)
precizarea formatului in numele resursei solicitate
/venue.json (Foursquare)
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Utilizarea subdomeniilor pentru API-uri diferite
ale aceluiasi ofertant de servicii
exemplificare:
search.twitter.com
stream.twitter.com
api.twitter.com
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Suplimentar, alaturi de API
poate fi oferit un SDK (Software Development Kit)
incapsuleaza functionalitatile API-ului intr-o biblioteca
(implementata intr-un anumit limbaj de programare,
pentru o platforma software/hardware specifica)
API façade pattern
Dr.SabinBuragawww.purl.org/net/busaco
privire pragmatica
Dr.SabinBuragawww.purl.org/net/busaco
Development as a Service
A.Iqbal,M.Haunsenblas,S.Decker(2012)
Dr.SabinBuragawww.purl.org/net/busaco
Web: CodeRun, Cloud9, eXo Cloud
desktop: Eclipse, <oXygen/>, Visual Studio
Google App Engine, Heroku,
Jelastic, Windows Azure
BitBucket, GitHub,
SourceForge, Unfuddle
Dr.SabinBuragawww.purl.org/net/busaco
Rezumat
Dezvoltarea de aplicatii orientate spre servicii Web
de la REST la mash-up-uri & API-uri
Dr.SabinBuragawww.purl.org/net/busaco
?

More Related Content

PDF
Servicii Web prin REST
PDF
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
PDF
WADe 2017-2018 (2/12) Service-based Web Application Development. REST
PDF
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
PDF
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
PDF
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
PDF
Dezvoltarea aplicațiilor Web (7/12): Arhitectura aplicaţilor RDF. Linked Open...
PDF
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
Servicii Web prin REST
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
WADe 2017-2018 (2/12) Service-based Web Application Development. REST
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Dezvoltarea aplicațiilor Web (7/12): Arhitectura aplicaţilor RDF. Linked Open...
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii

What's hot (20)

PDF
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
PDF
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
PDF
WADe 2017-2018 (3/12) Web Application Development: Architectural Aspects
PDF
Design (Web) responsiv
PDF
Dezvoltator Web?! (varianta 2015)
PDF
Sabin Buraga – Dezvoltator Web (...în 2017)
PDF
Ce înseamnă a fi dezvoltator Web (varianta 2014)
PDF
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
PDF
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
PDF
Sabin Buraga: Participând la Web
PDF
Sabin Buraga: Dezvoltator Web?! (2019)
PDF
Dezvoltator Web?! – ...în 2016
PDF
Ce înseamnă să fii dezvoltator Web
PDF
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
PDF
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
PDF
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
PDF
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
PDF
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
PDF
Web 2020 01/12: World Wide Web – aspecte arhitecturale
PDF
25 de ani de Web
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
WADe 2017-2018 (3/12) Web Application Development: Architectural Aspects
Design (Web) responsiv
Dezvoltator Web?! (varianta 2015)
Sabin Buraga – Dezvoltator Web (...în 2017)
Ce înseamnă a fi dezvoltator Web (varianta 2014)
CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Sabin Buraga: Participând la Web
Sabin Buraga: Dezvoltator Web?! (2019)
Dezvoltator Web?! – ...în 2016
Ce înseamnă să fii dezvoltator Web
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
Web 2020 01/12: World Wide Web – aspecte arhitecturale
25 de ani de Web
Ad

Similar to Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-uri si API-uri (18)

PDF
STAW 01/12: Arhitectura aplicaţiilor Web
PDF
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
PDF
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
PDF
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
PDF
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
PDF
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
PDF
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
PDF
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
PDF
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
PDF
Suita de tehnologii HTML5
PDF
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
PDF
CLIW 2015-2016 (3/13) Design Web. Interacțiune, utilizabilitate, metodologii ...
PDF
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
PDF
Dezvoltarea aplicațiilor Web (11/12): Inginerie ontologică: Management de cun...
PDF
Web 2016 (11/13) Servicii Web. Paradigma REST
STAW 01/12: Arhitectura aplicaţiilor Web
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
Suita de tehnologii HTML5
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
CLIW 2015-2016 (3/13) Design Web. Interacțiune, utilizabilitate, metodologii ...
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
Dezvoltarea aplicațiilor Web (11/12): Inginerie ontologică: Management de cun...
Web 2016 (11/13) Servicii Web. Paradigma REST
Ad

More from Sabin Buraga (20)

PDF
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
PDF
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
PDF
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
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 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
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
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
PDF
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
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
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
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 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
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)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
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

Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-uri si API-uri