SlideShare une entreprise Scribd logo
1  sur  137
Télécharger pour lire hors ligne
servicii Web în stil REST

Dr. Sabin Buragawww.purl.org/net/busaco

Dezvoltarea aplicațiilor Web
Aristotel

Dr. Sabin Buragawww.purl.org/net/busaco

“Prima calitate a stilului este claritatea.”
Dr. Sabin Buragawww.purl.org/net/busaco

Care sunt scopurile Web-ului?
partajarea cunoștințelor

Dr. Sabin Buragawww.purl.org/net/busaco

Constituirea și interacțiunea
cu un spațiu de comunicare inter-umană
partajarea cunoștințelor
Web social (“Web 2.0”), Web-ul datelor (semantic),…

Dr. Sabin Buragawww.purl.org/net/busaco

Constituirea și interacțiunea
cu un spațiu de comunicare inter-umană
accesul la Web se poate realiza
via dispozitive având resurse reduse

Dr. Sabin Buragawww.purl.org/net/busaco

Exploatarea puterii computaționale
accesul la Web se poate realiza
via dispozitive având resurse reduse
Web ubicuu (omniprezent), Web mobil, Web 3D,…
performanțăasigurarea scalabilității

Dr. Sabin Buragawww.purl.org/net/busaco

Exploatarea puterii computaționale
Dr. Sabin Buragawww.purl.org/net/busaco

Cum pot fi accesate & procesate resursele
– date, informații, cunoștințe –
disponibile pe Web?
Soluții multi-platformă, slab-conectate
integrare (în timp-real) la nivel de Internet/Web
a aplicațiilor, serviciilor și sistemelor

Dr. Sabin Buragawww.purl.org/net/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 de resurse Web, pe baza localizării
geografice a utilizatorului, privind ofertele de servicii
multiple disponibile în contextul dispozitivelor mobile

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/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
informative (e.g., situri de știri, blog-uri) conform
preferințelor utilizatorului, pe baza intereselor sale

Dr. Sabin Buragawww.purl.org/net/busaco

nevoi ale dezvoltatorilor Web
Servicii atașabile (pluggable) & versatile

Software as a Service – SaaS
Application Service Provider – ASP

Dr. Sabin Buragawww.purl.org/net/busaco

nevoi ale dezvoltatorilor Web
Dr. Sabin Buragawww.purl.org/net/busaco

Există un model arhitectural de dezvoltare
a serviciilor la nivel de Web?
Divizarea aplicațiilor în servicii – independente –
care se pot compune,
menite a se conecta și orchestra în mod spontan
în cadrul proceselor de afaceri/tehnice

Dr. Sabin Buragawww.purl.org/net/busaco

soluție
Divizarea aplicațiilor în servicii – independente –
care se pot compune,
menite a se conecta și orchestra în mod spontan
în cadrul proceselor de afaceri/tehnice

Web component-based software

Dr. Sabin Buragawww.purl.org/net/busaco

soluție
“The Web is the computer”
Dr. Sabin Buraga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. Sabin Buragawww.purl.org/net/busaco

solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
permit(e) localizarea transparentă a serviciilor

Dr. Sabin Buragawww.purl.org/net/busaco

solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
facilitează adăugarea, înlocuirea, eliminarea
serviciilor în mod dinamic

Dr. Sabin Buragawww.purl.org/net/busaco

solutie
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
ascund(e) dezvoltatorului detaliile de sistem

Dr. Sabin Buragawww.purl.org/net/busaco

solutie
“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ță facilă etc.

Dr. Sabin Buragawww.purl.org/net/busaco

solutie
Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Software oferind o funcționalitate specifică
acces la resurse – Delicious, Pinterest, Slideshare, Vimeo
agregare de știri – Digg, Reddit
cartografiere – Bing Maps, Google Maps, Nokia HERE
mesagerie instantanee – Jabber, Twitter, Twilio
procesări – Anger Detection, Ping.it, Skyttle, Truthy,…
realizare de statistici Web – Google Analytics
rețele sociale – e.g., Facebook Open Graph Protocol
spelling checking – Spellr.us
stocare de date – Amazon S3, Dropbox, SkyDrive etc.
…

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Software oferind o funcționalitate specifică
acces la resurse – Delicious, Pinterest, Slideshare, Vimeo
agregare de știri – Digg, Reddit
cartografiere – Bing Maps, Google Maps, Nokia HERE
mesagerie instantanee – Jabber, Twitter, Twilio
procesări – Anger Detection, Ping.it, Skyttle, Truthy,…
realizare de statistici Web – Google Analytics
rețele sociale – e.g., Facebook Open Graph Protocol
spelling checking – Spellr.us
stocare de date – Amazon S3, Dropbox, SkyDrive etc.
…
utilizate – la distanță – de alte aplicații/servicii

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Accesate standardizat via Web
URI
HTTP
XML și/sau alte formate (e.g., JSON)

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Dr. Sabin Buragawww.purl.org/net/busaco

Cum am implementa un serviciu?
Implementare standard
recurgerea la script-uri CGI sau
servere/framework-uri de aplicații Web
ASP.NET, JSP, Node.js,
PHP (CodeIgnater, Symfony,…)
Ruby on Rails,…

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Arhitectura generică a unei aplicații Web
(3-tier application)
Internet
(Web)

Client
(interface)

Server de aplicații Stocare
(application) (persistence)

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Cream / Markup

Custard / Page Logic

Jelly / Business Logic

Sponge / Database

C. Henderson, “Scalable Web Architectures”,
Web 2.0 Expo, 2007: iamcal.com/talks/

Dr. Sabin Buragawww.purl.org/net/busaco

Fruit / Presentation
Cream / Markup

Custard / Page Logic

Jelly / Business Logic

Sponge / Database

C. Henderson, “Scalable Web Architectures”,
Web 2.0 Expo, 2007: iamcal.com/talks/

Dr. Sabin Buragawww.purl.org/net/busaco

Fruit / Presentation
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
limbaj de marcare – e.g., HTML
stiluri de prezentare a conținutului – CSS
interactivitate via JavaScript

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
cererile sunt capt(ur)ate via formulare
+ legături hipertext

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
utilizatorii umani trebuie să interpreteze etichetele
și câmpurile de dialog

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
serviciul implementat oferă un răspuns
(o reprezentare a unei resurse Web)
uzual, un document HTML al cărui conținut
e transferat la client via un protocol: HTTP

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Cum obținem răspunsul pentru a fi (re)folosit
în programele noastre?
procesarea datelor din codul HTMLWeb scrapping

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web

<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>
Cum obținem răspunsul pentru a fi (re)folosit
în programele noastre?

???!
orice modificare în marcajerescrierea programului
de preluare a datelor din documentul HTML

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Dr. Sabin Buragawww.purl.org/net/busaco

Ce-ar fi să indicăm datele de intrare și
răspunsul oferit de serviciul Web
într-un format standardizat?
posibile soluții:
XML-RPC

“dialog”
prin XML

SOAP
POX (Plain Old XML)
JSON (JavaScript Object Notation)

Dr. Sabin Buragawww.purl.org/net/busaco

servicii web
Dr. Sabin Buragawww.purl.org/net/busaco

Există un model arhitectural de dezvoltare
a serviciilor la nivel de Web?
Arhitectura orientată spre servicii
SOA – Service Oriented Architecture

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Arhitectura orientată spre servicii
SOA – Service Oriented Architecture
stil arhitectural de proiectare & dezvoltare de aplicații
considerate drept servicii
care pot fi invocate de alte aplicații

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Paradigma de dezvoltare a software-ului
care adoptă folosirea de servicii,
oferind funcționalități solicitate de utilizatori

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Paradigma 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)

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Dr. Sabin Buragawww.purl.org/net/busaco

soa

Douwe Osinga & Jon Tirsen, “Architecture of the Triposo travel guide”,
QCon London, 2013 – www.infoq.com/presentations/triposo-architecture
Componentele sistemului în ansamblu
au un grad mare de independență (de-coupling)

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Componentele sistemului în ansamblu
au un grad mare de independență (de-coupling)
serviciile pot fi recompuse/orchestrate
conform cerințelor sau contextului

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Serviciile să nu depindă de starea comunicării
(statelessness)

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Serviciile să nu depindă de starea comunicării
(statelessness)
cantitatea de informație specifică unei activități
ce trebuie reținută trebuie să fie minimală

Dr. Sabin Buragawww.purl.org/net/busaco

soa
Dr. Sabin Buragawww.purl.org/net/busaco

Exista o modalitate pragmatică
privind dezvoltarea & invocarea serviciilor Web?
Stil arhitectural de dezvoltare a aplicațiilor Web
cu focalizare asupra reprezentării datelor

teza de doctorat a lui Roy Fielding, 2000

Dr. Sabin Buragawww.purl.org/net/busaco

rest: representational state transfer
Viziune complementară de implementare și
utilizare a serviciilor Web – fără SOAP

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
resursă Web
un utilizator având cont în cadrul unui sistem,
blog-ul unei persoane, o fotografie,
flux de știri, program etc.

Dr. Sabin Buragawww.purl.org/net/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: HTML, JPEG, PNG, PDF, Atom, JSON,…

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
reprezentare = (X)HTML, JPEG, PNG, PDF, Atom, JSON,…
formatul reprezentării e desemnat de tipuri MIME
text/html, image/png, application/json etc.

Dr. Sabin Buragawww.purl.org/net/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
(XHTML)

reprezentare2
(Atom)

resursa
URI

Dr. Sabin Buragawww.purl.org/net/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
URL

URL

reprezentare1
(XHTML)

reprezentare2
(Atom)

resursa
URI

Dr. Sabin Buragawww.purl.org/net/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,…
GET POST

GET DELETE

URL

URL

reprezentare1
(XHTML)

reprezentare2
(Atom)

resursa
URI

Dr. Sabin Buragawww.purl.org/net/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 returnarea
aceluiași răspuns (aceeași reprezentare)

Dr. Sabin Buragawww.purl.org/net/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. Sabin Buragawww.purl.org/net/busaco

rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
POST
creează o resursă (uzual, subordonată altei resurse)
nu este nici safe, nici idempotentă
utilizată când clientul nu cunoaște a-priori
care va fi URI-ul resursei ce va fi create

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Verbele (acțiunile) sunt stipulate de protocolul HTTP
DELETE
șterge (elimină) o resursă desemnată de un URI
este idempotentă

Dr. Sabin Buragawww.purl.org/net/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. Sabin Buragawww.purl.org/net/busaco

rest
http://blog.info/
reprezentare1
(XHTML)
resursa1

reprezentare2
(XHTML)

GET

POST
resursa2

http://blog.info/stiri

GET

http://blog.info/mesaj/edit

reprezentare4
(Atom)
resursa4

reprezentare3
(XHTML)

resursa3

Dr. Sabin Buragawww.purl.org/net/busaco

http://blog.info/mesaj
http://blog.info/mesaj

http://blog.info/
reprezentare1
(XHTML)
resursa1

reprezentare2
(XHTML)

GET

POST
resursa2

http://blog.info/stiri

GET

http://blog.info/mesaj/edit

reprezentare4
(Atom)
resursa4

reprezentare3
(XHTML)

resursa3

Dr. Sabin Buragawww.purl.org/net/busaco

HATEOAS (Hypermedia As The Engine Of Application State)
Transferul se realizează prin protocolul HTTP

Dr. Sabin Buragawww.purl.org/net/busaco

rest

Reprezentarea este modelată conform unui format
– e.g., XML sau JSON – și indicată prin tipuri MIME
Adresabilitatea se rezolvă via URI
Aplicațiile care invocă funcționalități (servicii)
consumă reprezentări de resurse – în stilul pull

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Fiecare cerere este considerată independentă,
fără a se lua în considerație contextul
stateless server

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Reprezentările de resurse pot fi stocate temporar

caching

Dr. Sabin Buragawww.purl.org/net/busaco

rest
client
cache

Dr. Sabin Buragawww.purl.org/net/busaco

stateless server

client

cache
adaptare dupa B. Mulloy (2012)
client

stateless server

cache

Dr. Sabin Buragawww.purl.org/net/busaco

client

fiecare cerere
trebuie sa contina
toate informatiile
necesare procesarii

cache
adaptare dupa B. Mulloy (2012)
contextul activitatilor
nu-i stocat de server

client

stateless server

cache

Dr. Sabin Buragawww.purl.org/net/busaco

client

cache
adaptare dupa B. Mulloy (2012)
stateless server

cache

client
cache

clientul are dreptul
sa reutilizeze datele
receptionate

Dr. Sabin Buragawww.purl.org/net/busaco

client

adaptare dupa B. Mulloy (2012)
Aplicația Web dezvoltată va fi stratificată
layered system

Dr. Sabin Buragawww.purl.org/net/busaco

rest
client

firewall

gateway

load
balan
cer

stateless
server

stateless
server
adaptare dupa B. Mulloy (2012)

Dr. Sabin Buragawww.purl.org/net/busaco

stateless
server
fiecare strat ofera
servicii stratelor
vecine

client

firewall

gateway

load
balan
cer

stateless
server

stateless
server
adaptare dupa B. Mulloy (2012)

Dr. Sabin Buragawww.purl.org/net/busaco

stateless
server
firewall

client

gateway

un strat nu poate
“vedea” strate
neinvecinate

adaptare dupa B. Mulloy (2012)

load
balan
cer

stateless
server

stateless
server

Dr. Sabin Buragawww.purl.org/net/busaco

stateless
server
client

firewall

gateway

load
balan
cer

stateless
server

stateless
server

stateless
server
adaptare dupa B. Mulloy (2012)

Dr. Sabin Buragawww.purl.org/net/busaco

stratele pot incapsula
(“ascunde”) sisteme
traditionale – blackbox
client

firewall

gateway

load
balan
cer

are rol in asigurarea
performantei/
fiabilitatii

adaptare dupa B. Mulloy (2012)

stateless
server

stateless
server

Dr. Sabin Buragawww.purl.org/net/busaco

stateless
server
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. Sabin Buragawww.purl.org/net/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. Sabin Buragawww.purl.org/net/busaco

rest: exemplu
Metoda
rest: exemplu

URL
/bookmarks/{md5}
/bookmarks/{md5}
/bookmarks/{md5}

GET
PUT
DELETE

Reprezentare
application/bookmark+xml
application/bookmark+xml

/bookmarks

GET

application/atom+xml

/users

GET

application/atom+xml

/tags

GET

application/atom+xml

/

GET

application/xml

Dr. Sabin Buragawww.purl.org/net/busaco

Resursa
Bookmark
Bookmark
Bookmark
Lista de
adrese
Lista de
utilizatori
Lista de
tag-uri
Pagina
principală
răspuns XML (Atom)
oferit de serviciu
Dr. Sabin Buraga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>
digest MD5
<title>O resursa interesanta</title>
<link
href="/bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf"/>
<summary>
http://undeva.info/o-resursa-interesanta
</summary>
</entry>
<!-- eventual, alte elemente <entry>… -->
obținerea
</feed>
bookmark-urilor
<bookmark>
<title>O resursă de interes</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. Sabin Buragawww.purl.org/net/busaco

GET /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
200 OK
Content-type: application/bookmark+xml
POST /bookmarks
Content-type: application/bookmark+xml
…
201 Created
Location: /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf

PUT /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf
Content-type: application/bookmark+xml
…
actualizarea
200 OK
unui bookmark

Dr. Sabin Buragawww.purl.org/net/busaco

crearea unui
bookmark
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

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/busaco

rest
Divizarea în 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. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Numirea prin URI a fiecărei resurse
exemplificări:

http://aplicatie.info/Utilizator/tux
http://aplicatie.info/Document/pinguini-cu-mere-albastre

Dr. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Numirea prin URI a fiecărei resurse
cazuri concrete:
însemnările etichetate cu fii disponibile pe un blog
http://fiistudent.wordpress.com/tag/fii/
accesarea datelor despre o producție cinematografică
http://www.imdb.com/title/tt0401383/
obținerea listei utilizatorilor ce urmăresc o persoană
http://twitter.com/followers

Dr. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Numirea prin URI a fiecarei resurse
cazuri concrete:
acces la prezentările 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 acțiunii de editare a unui document XWiki
http://www.info.uaic.ro/bin/edit/Students/Timetable

Dr. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Interacțiunea cu un serviciu Web dezvoltat în stilul REST
se poate face via un API
(Application Programming Interface)
alte detalii în
cursul viitor

pentru exemple de bune practici, a se consulta
www.restapitutorial.com

Dr. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Proiectarea reprezentarii(lor) acceptate
ce pot fi trimise de aplicația client
și reprezentării(lor) întoarse spre client

de considerat formatele standard – e.g., HTML, Atom

Dr. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Integrarea resurselor
via legături hipertext + formulare

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/busaco

rest: metodologie
Dr. Sabin Buragawww.purl.org/net/busaco

Aspecte practice de interes pentru dezvoltatori?
URL-urile desemnând resurse (concepte)
de interes trebuie să fie simple și intuitive
utilizarea substantivelor pentru fiecare “lucru”
colecții de resurse (uzual, la plural)
/students
identificatori unici pentru membrii unei colecții
/students/tuxy (concret) vs. /students/69 (abstract)

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Folosirea verbelor (metodelor) HTTP pentru efectuarea
de operații asupra unor (colecții de) resurse
resursa
(URI)
/students
/students/69
(un URL deja
existent)

POST
(creează)

GET
PUT
DELETE
(accesează) (actualizează) (șterge)

creează
listează studenții
un student nou
existenți
eroare 

oferă date
despre student

actualizează
un set de studenți

șterge toți
studenții

dacă există,
actualizează,
altfel eroare

șterge
studentul
respectiv

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Tratarea erorilor
folosirea codurilor de stare HTTP
200 – OK
303 – See Other
400 – Bad Request, 404 – Not Found
500 – Internal Server Error

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
http://httpstatus.es/
Dr. Sabin Buragawww.purl.org/net/busaco

privire pragmatica
Tratarea erorilor
mesajele returnate trebuie să includă informații utile
exemplu: Twilio – cod de stare HTTP întors: 401
{ "status":
"message":
"code":
"more info":
}

"401",
"Authenticate",
20003,
"http://www.twilio.com/docs/errors/20003"

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
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

http://feeds.delicious.com/v2/{format}/{username}
Facebook – ?v=1.0

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Paginarea & oferirea de răspunsuri parțiale
uzual, se folosesc parametri precum limit și offset
/students?limit=33&offset=54
filtrele opționale (e.g., în contextul faceted search)
pot fi delimitate de virgulă
/students?fields=name,age,year,email

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Dr. Sabin Buragawww.purl.org/net/busaco

privire pragmatica

interogări interactive asupra API-ului oferit de The New York Times

http://developer.nytimes.com/
Paginarea & 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

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
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)
Utilizarea subdomeniilor pentru API-uri diferite
ale aceluiași ofertant de servicii
exemplificare:
search.twitter.com
stream.twitter.com
api.twitter.com

Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Dr. Sabin Buragawww.purl.org/net/busaco

Cum pot fi accesate reprezentări de resurse Web
prin REST?
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. Sabin Buragawww.purl.org/net/busaco

rest: implementare
Studiu de caz: acces la Wikipedia
folosim URL-ul
http://en.wikipedia.org/w/api.php?action=query&
prop=categories&titles=Category:Arts&format=format
pentru a obține date despre categoriile asociate artelor
în diverse formate (JSON, XML, text obișnuit,…)
detalii la www.mediawiki.org/wiki/API

Dr. Sabin Buragawww.purl.org/net/busaco

rest: implementare
Dr. Sabin Buragawww.purl.org/net/busaco

HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Thu, 25 Apr 2013 17:01:59 GMT
Content-Type: text/xml; charset=utf-8

<api>
<query>
<pages>
<page pageid="4892515" ns="14" title="Category:Arts">
<categories>
<cl ns="14" title="Category:Creativity"></cl>
<cl ns="14" title="Category:Culture"></cl>
<cl ns="14" title="Category:Humanities"></cl>
<cl ns="14" title="Category:Main topic classifications"></cl>
</categories>
</page>
</pages>
răspuns XML furnizat de serviciul Web
</query>
implementat de Wikipedia
</api>
Dr. Sabin Buragawww.purl.org/net/busaco

reprezentarea
JSON
echivalentă
Studiu de caz: accesarea datelor publice
oferite de Science Museum (Londra)
se recurge la URL-ul
http://api.sciencemuseum.org.uk/exhibitions/?output=json
pentru a obține mesajele publice în format JSON
detalii la http://api.sciencemuseum.org.uk/

Dr. Sabin Buragawww.purl.org/net/busaco

rest: implementare
{ "exhibitions": [
{ "id"
"name"
"admission_fee"
"opened_on"
"closed_on"
"closed"
"website"
},
{
…
} ],
"maximum"
"returned"
}

: "1031",
: "Dan Dare & the Birth of Hi-tech Britain",
: false,
: "2008-04-30",
: "2009-10-24",
: null,
: "http://www.sciencemuseum.org.uk/..."

: 1000,
: 91

Cum putem valida
corectitudinea răspunsului
JSON obținut?
Ce schemă e folosită?

Dr. Sabin Buragawww.purl.org/net/busaco

HTTP/1.1 200 OK
Date: Mon, 30 Sep 2013 16:05:22 GMT
Content-Type: application/json
Server: Microsoft-IIS/6.0
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. Sabin Buraga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
atenție la problemele de securitate ce pot apărea!

Dr. Sabin Buragawww.purl.org/net/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)

Dr. Sabin Buragawww.purl.org/net/busaco

rest: implementare
Dr. Sabin Buragawww.purl.org/net/busaco

rest: implementare
Exemplificare recurgând la biblioteca jQuery (JavaScript):
jQuery.ajax ({ // execută 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",
// dorim răspunsul în format JSON
success: function(data) { // funcție apelată la transfer cu succes
$('.rezultat').html(data); // preluăm datele, convertindu-le în HTML
}
});
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. Sabin Buragawww.purl.org/net/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,…

6395 API-uri (06 oct. 2013) – http://tinyurl.com/2ssfc2
inclusiv API publice disponibile pentru C++, C#, Java,
JavaScript, PHP, Python, Objective-C, Ruby,…

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/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.

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/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),
apoi va putea autoriza aplicația să aiba acces la date
via serviciul Web furnizat

Dr. Sabin Buragawww.purl.org/net/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

Dr. Sabin Buragawww.purl.org/net/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)

Dr. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare
Autorizarea securizată a unei aplicații să acceseze
date private într-un mod standardizat
se poate realiza via OAuth

Dr. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare – oauth
Autorizarea securizată a unei aplicații să acceseze
date private într-un mod standardizat
se poate realiza via OAuth
protocol deschis
OAuth 1.0 (2010), OAuth 2.0 (2012)
http://oauth.net/

Dr. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare – oauth
Exemplificări concrete:
Evernote, Facebook, Google, Ohloh, OpenSocial,
Photobucket, TripIt, Twitter, Vimeo, Windows Live,
Yahoo!, Yammer,...
pot fi utilizate diverse biblioteci disponibile
pentru C#, Java, Objective-C, Perl, PHP, Python, Ruby etc.
http://oauth.net/code/

Dr. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare – oauth
OpenID
mecanism descentralizat de autentificare a utilizatorului
la nivel de Web pe baza paradigmei SSO – Single Sign On

Dr. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare – openid

via un ofertant (serviciu) de identitate (identity provider),
utilizatorii pot să-și gestioneze prezențe online multiple
http://openid.net/
OpenID
fiecare identitate e desemnată de un URL (stabilit de
identity provider): me.yahoo.com, nume.wordpress.com,
google.com/profiles/nume, launchpad.net/~nume etc.
pentru a-și confirma identitatea,
utilizatorul va trebui să se autentifice:
nume de cont + parolă, smart card, date biometrice,…

Dr. Sabin Buraga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. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare – openid
Mozilla Persona
soluție de autentificare unică (în stilul SSO)
la nivel de browser Web
identitatea utilizatorului e dată de adresa de e-mail
http://developer.mozilla.org/Persona
http://github.com/mozilla/browserid-cookbook

Dr. Sabin Buragawww.purl.org/net/busaco

rest: dezvoltare – mozilla persona
aplicații orientate spre servicii Web în stilul REST

Dr. Sabin Buragawww.purl.org/net/busaco

rezumat
Dr. Sabin Buragawww.purl.org/net/busaco

episodul viitor: ingineria aplicațiilor Web
de la API-uri & mashup-uri la proiectare arhitecturală

Contenu connexe

Tendances

Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Sabin Buraga
 
Dezvoltator Web?! (varianta 2015)
Dezvoltator Web?! (varianta 2015)Dezvoltator Web?! (varianta 2015)
Dezvoltator Web?! (varianta 2015)Sabin Buraga
 
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...Sabin Buraga
 
Ce înseamnă a fi dezvoltator Web (varianta 2014)
Ce înseamnă a fi dezvoltator Web (varianta 2014)Ce înseamnă a fi dezvoltator Web (varianta 2014)
Ce înseamnă a fi dezvoltator Web (varianta 2014)Sabin Buraga
 
Sabin Buraga: Participând la Web
Sabin Buraga: Participând la WebSabin Buraga: Participând la Web
Sabin Buraga: Participând la WebSabin Buraga
 
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...Sabin Buraga
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSabin Buraga
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebSabin Buraga
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...Sabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...Sabin Buraga
 
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluCLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluSabin Buraga
 
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturaleWeb 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturaleSabin Buraga
 
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul RESTWADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul RESTSabin Buraga
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientSabin Buraga
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebSabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...Sabin Buraga
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Sabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....Sabin Buraga
 
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziuneWADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziuneSabin Buraga
 
Sabin Buraga – Dezvoltator Web (...în 2017)
Sabin Buraga – Dezvoltator Web (...în 2017)Sabin Buraga – Dezvoltator Web (...în 2017)
Sabin Buraga – Dezvoltator Web (...în 2017)Sabin Buraga
 

Tendances (20)

Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 
Dezvoltator Web?! (varianta 2015)
Dezvoltator Web?! (varianta 2015)Dezvoltator Web?! (varianta 2015)
Dezvoltator Web?! (varianta 2015)
 
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
 
Ce înseamnă a fi dezvoltator Web (varianta 2014)
Ce înseamnă a fi dezvoltator Web (varianta 2014)Ce înseamnă a fi dezvoltator Web (varianta 2014)
Ce înseamnă a fi dezvoltator Web (varianta 2014)
 
Sabin Buraga: Participând la Web
Sabin Buraga: Participând la WebSabin Buraga: Participând la Web
Sabin Buraga: Participând la Web
 
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #4): Design Web. Proi...
 
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluCLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
 
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturaleWeb 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
 
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul RESTWADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #7): Proiectarea apli...
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
 
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziuneWADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
WADe 2014—2015 (01/12): Dezvoltarea de aplicaţii Web: Concepte & viziune
 
Sabin Buraga – Dezvoltator Web (...în 2017)
Sabin Buraga – Dezvoltator Web (...în 2017)Sabin Buraga – Dezvoltator Web (...în 2017)
Sabin Buraga – Dezvoltator Web (...în 2017)
 

En vedette

City Dreams Cum Lucram
City  Dreams  Cum LucramCity  Dreams  Cum Lucram
City Dreams Cum LucramDaniel Dobre
 
Servicii financiare - Charisma Days 2011
Servicii financiare - Charisma Days 2011Servicii financiare - Charisma Days 2011
Servicii financiare - Charisma Days 2011TotalSoft
 
Marketing in turism servicii
Marketing in turism   serviciiMarketing in turism   servicii
Marketing in turism serviciivasile cosma
 
Psihologia Mulțimilor de Gustave Le Bon
 Psihologia Mulțimilor de Gustave Le Bon Psihologia Mulțimilor de Gustave Le Bon
Psihologia Mulțimilor de Gustave Le BonSergey Oboroc
 
Dezvoltator Web?! – ...în 2016
Dezvoltator Web?! – ...în 2016Dezvoltator Web?! – ...în 2016
Dezvoltator Web?! – ...în 2016Sabin Buraga
 
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)Sabin Buraga
 

En vedette (7)

City Dreams Cum Lucram
City  Dreams  Cum LucramCity  Dreams  Cum Lucram
City Dreams Cum Lucram
 
Servicii financiare - Charisma Days 2011
Servicii financiare - Charisma Days 2011Servicii financiare - Charisma Days 2011
Servicii financiare - Charisma Days 2011
 
Marketing in turism servicii
Marketing in turism   serviciiMarketing in turism   servicii
Marketing in turism servicii
 
Facebook
FacebookFacebook
Facebook
 
Psihologia Mulțimilor de Gustave Le Bon
 Psihologia Mulțimilor de Gustave Le Bon Psihologia Mulțimilor de Gustave Le Bon
Psihologia Mulțimilor de Gustave Le Bon
 
Dezvoltator Web?! – ...în 2016
Dezvoltator Web?! – ...în 2016Dezvoltator Web?! – ...în 2016
Dezvoltator Web?! – ...în 2016
 
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
 

Similaire à Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST

Ce înseamnă să fii dezvoltator Web
Ce înseamnă să fii dezvoltator WebCe înseamnă să fii dezvoltator Web
Ce înseamnă să fii dezvoltator WebSabin Buraga
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSabin Buraga
 
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...Sabin Buraga
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...Sabin Buraga
 
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...Sabin Buraga
 
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...Sabin Buraga
 
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de clientCLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de clientSabin Buraga
 
Suita de tehnologii HTML5
Suita de tehnologii HTML5Suita de tehnologii HTML5
Suita de tehnologii HTML5Sabin Buraga
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Sabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...Sabin Buraga
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebSabin Buraga
 
CLIW 2014—2015 (6/12): Căutarea resurselor Web
CLIW 2014—2015 (6/12): Căutarea resurselor WebCLIW 2014—2015 (6/12): Căutarea resurselor Web
CLIW 2014—2015 (6/12): Căutarea resurselor WebSabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...Sabin Buraga
 
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...Sabin Buraga
 
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de cazCLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de cazSabin Buraga
 

Similaire à Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST (16)

Ce înseamnă să fii dezvoltator Web
Ce înseamnă să fii dezvoltator WebCe înseamnă să fii dezvoltator Web
Ce înseamnă să fii dezvoltator Web
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor Web
 
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
CLIW 2017-2018 (1/12) Interacţiune Web: de la concepte & utilizabilitate la d...
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
 
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
CLIW 2017-2018 (3/12) (Re)găsirea resurselor Web. De la motoare de căutare şi...
 
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
 
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de clientCLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
CLIW 2017-2018 (12/12) Performanţa aplicaţiilor Web la nivel de client
 
Suita de tehnologii HTML5
Suita de tehnologii HTML5Suita de tehnologii HTML5
Suita de tehnologii HTML5
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #3): Design Web. Inte...
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
 
CLIW 2014—2015 (6/12): Căutarea resurselor Web
CLIW 2014—2015 (6/12): Căutarea resurselor WebCLIW 2014—2015 (6/12): Căutarea resurselor Web
CLIW 2014—2015 (6/12): Căutarea resurselor Web
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #1): Interacţiune Web...
 
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
CLIW 2014—2015 (3/12): Design Web. Interacţiune, utilizabilitate & metodologi...
 
Ss1
Ss1Ss1
Ss1
 
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de cazCLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
CLIW 2015-2016 (1/13) Interacțiune Web: concepte, context, studii de caz
 

Plus de Sabin Buraga

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleSabin Buraga
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Sabin Buraga
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelSabin Buraga
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Sabin Buraga
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTSabin Buraga
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Sabin Buraga
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeSabin Buraga
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSabin Buraga
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.Sabin Buraga
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSabin Buraga
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSabin Buraga
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSabin Buraga
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)Sabin Buraga
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)Sabin Buraga
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...Sabin Buraga
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesSabin Buraga
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignSabin Buraga
 

Plus de Sabin Buraga (20)

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturale
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
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 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
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 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
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 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
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
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. 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 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
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 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
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 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
 

Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST

  • 1. servicii Web în stil REST Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea aplicațiilor Web
  • 2. Aristotel Dr. Sabin Buragawww.purl.org/net/busaco “Prima calitate a stilului este claritatea.”
  • 4. partajarea cunoștințelor Dr. Sabin Buragawww.purl.org/net/busaco Constituirea și interacțiunea cu un spațiu de comunicare inter-umană
  • 5. partajarea cunoștințelor Web social (“Web 2.0”), Web-ul datelor (semantic),… Dr. Sabin Buragawww.purl.org/net/busaco Constituirea și interacțiunea cu un spațiu de comunicare inter-umană
  • 6. accesul la Web se poate realiza via dispozitive având resurse reduse Dr. Sabin Buragawww.purl.org/net/busaco Exploatarea puterii computaționale
  • 7. accesul la Web se poate realiza via dispozitive având resurse reduse Web ubicuu (omniprezent), Web mobil, Web 3D,… performanțăasigurarea scalabilității Dr. Sabin Buragawww.purl.org/net/busaco Exploatarea puterii computaționale
  • 8. Dr. Sabin Buragawww.purl.org/net/busaco Cum pot fi accesate & procesate resursele – date, informații, cunoștințe – disponibile pe Web?
  • 9. Soluții multi-platformă, slab-conectate integrare (în timp-real) la nivel de Internet/Web a aplicațiilor, serviciilor și sistemelor Dr. Sabin Buragawww.purl.org/net/busaco nevoi ale dezvoltatorilor Web
  • 10. Soluții multi-platformă, slab-conectate integrare (în timp-real) la nivel de Internet/Web a aplicațiilor, serviciilor și sistemelor exemplificare: găsirea de resurse Web, pe baza localizării geografice a utilizatorului, privind ofertele de servicii multiple disponibile în contextul dispozitivelor mobile Dr. Sabin Buragawww.purl.org/net/busaco nevoi ale dezvoltatorilor Web
  • 11. Soluții multi-platformă, slab-conectate datele să poată fi descrise pentru a fi “înțelese” de calculatoare și pentru a fi interconectate facil Dr. Sabin Buragawww.purl.org/net/busaco nevoi ale dezvoltatorilor Web
  • 12. 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 informative (e.g., situri de știri, blog-uri) conform preferințelor utilizatorului, pe baza intereselor sale Dr. Sabin Buragawww.purl.org/net/busaco nevoi ale dezvoltatorilor Web
  • 13. Servicii atașabile (pluggable) & versatile Software as a Service – SaaS Application Service Provider – ASP Dr. Sabin Buragawww.purl.org/net/busaco nevoi ale dezvoltatorilor Web
  • 14. Dr. Sabin Buragawww.purl.org/net/busaco Există un model arhitectural de dezvoltare a serviciilor la nivel de Web?
  • 15. Divizarea aplicațiilor în servicii – independente – care se pot compune, menite a se conecta și orchestra în mod spontan în cadrul proceselor de afaceri/tehnice Dr. Sabin Buragawww.purl.org/net/busaco soluție
  • 16. Divizarea aplicațiilor în servicii – independente – care se pot compune, menite a se conecta și orchestra în mod spontan în cadrul proceselor de afaceri/tehnice Web component-based software Dr. Sabin Buragawww.purl.org/net/busaco soluție
  • 17. “The Web is the computer” Dr. Sabin Buragawww.purl.org/net/busaco solutie
  • 18. “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. Sabin Buragawww.purl.org/net/busaco solutie
  • 19. “The Web is the computer” disponibilitatea unei/unor arhitecturi care… permit(e) localizarea transparentă a serviciilor Dr. Sabin Buragawww.purl.org/net/busaco solutie
  • 20. “The Web is the computer” disponibilitatea unei/unor arhitecturi care… facilitează adăugarea, înlocuirea, eliminarea serviciilor în mod dinamic Dr. Sabin Buragawww.purl.org/net/busaco solutie
  • 21. “The Web is the computer” disponibilitatea unei/unor arhitecturi care… ascund(e) dezvoltatorului detaliile de sistem Dr. Sabin Buragawww.purl.org/net/busaco solutie
  • 22. “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ță facilă etc. Dr. Sabin Buragawww.purl.org/net/busaco solutie
  • 24. Software oferind o funcționalitate specifică acces la resurse – Delicious, Pinterest, Slideshare, Vimeo agregare de știri – Digg, Reddit cartografiere – Bing Maps, Google Maps, Nokia HERE mesagerie instantanee – Jabber, Twitter, Twilio procesări – Anger Detection, Ping.it, Skyttle, Truthy,… realizare de statistici Web – Google Analytics rețele sociale – e.g., Facebook Open Graph Protocol spelling checking – Spellr.us stocare de date – Amazon S3, Dropbox, SkyDrive etc. … Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 25. Software oferind o funcționalitate specifică acces la resurse – Delicious, Pinterest, Slideshare, Vimeo agregare de știri – Digg, Reddit cartografiere – Bing Maps, Google Maps, Nokia HERE mesagerie instantanee – Jabber, Twitter, Twilio procesări – Anger Detection, Ping.it, Skyttle, Truthy,… realizare de statistici Web – Google Analytics rețele sociale – e.g., Facebook Open Graph Protocol spelling checking – Spellr.us stocare de date – Amazon S3, Dropbox, SkyDrive etc. … utilizate – la distanță – de alte aplicații/servicii Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 26. Accesate standardizat via Web URI HTTP XML și/sau alte formate (e.g., JSON) Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 28. Implementare standard recurgerea la script-uri CGI sau servere/framework-uri de aplicații Web ASP.NET, JSP, Node.js, PHP (CodeIgnater, Symfony,…) Ruby on Rails,… Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 29. Arhitectura generică a unei aplicații Web (3-tier application) Internet (Web) Client (interface) Server de aplicații Stocare (application) (persistence) Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 30. Cream / Markup Custard / Page Logic Jelly / Business Logic Sponge / Database C. Henderson, “Scalable Web Architectures”, Web 2.0 Expo, 2007: iamcal.com/talks/ Dr. Sabin Buragawww.purl.org/net/busaco Fruit / Presentation
  • 31. Cream / Markup Custard / Page Logic Jelly / Business Logic Sponge / Database C. Henderson, “Scalable Web Architectures”, Web 2.0 Expo, 2007: iamcal.com/talks/ Dr. Sabin Buragawww.purl.org/net/busaco Fruit / Presentation
  • 32. Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web limbaj de marcare – e.g., HTML stiluri de prezentare a conținutului – CSS interactivitate via JavaScript Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 33. Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web cererile sunt capt(ur)ate via formulare + legături hipertext Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 34. Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web utilizatorii umani trebuie să interpreteze etichetele și câmpurile de dialog Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 35. Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web serviciul implementat oferă un răspuns (o reprezentare a unei resurse Web) uzual, un document HTML al cărui conținut e transferat la client via un protocol: HTTP Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 36. Cum obținem răspunsul pentru a fi (re)folosit în programele noastre? procesarea datelor din codul HTMLWeb scrapping Dr. Sabin Buragawww.purl.org/net/busaco servicii web <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>
  • 37. Cum obținem răspunsul pentru a fi (re)folosit în programele noastre? ???! orice modificare în marcajerescrierea programului de preluare a datelor din documentul HTML Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 38. Dr. Sabin Buragawww.purl.org/net/busaco Ce-ar fi să indicăm datele de intrare și răspunsul oferit de serviciul Web într-un format standardizat?
  • 39. posibile soluții: XML-RPC “dialog” prin XML SOAP POX (Plain Old XML) JSON (JavaScript Object Notation) Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  • 40. Dr. Sabin Buragawww.purl.org/net/busaco Există un model arhitectural de dezvoltare a serviciilor la nivel de Web?
  • 41. Arhitectura orientată spre servicii SOA – Service Oriented Architecture Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 42. Arhitectura orientată spre servicii SOA – Service Oriented Architecture stil arhitectural de proiectare & dezvoltare de aplicații considerate drept servicii care pot fi invocate de alte aplicații Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 43. Paradigma de dezvoltare a software-ului care adoptă folosirea de servicii, oferind funcționalități solicitate de utilizatori Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 44. Paradigma 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) Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 45. Dr. Sabin Buragawww.purl.org/net/busaco soa Douwe Osinga & Jon Tirsen, “Architecture of the Triposo travel guide”, QCon London, 2013 – www.infoq.com/presentations/triposo-architecture
  • 46. Componentele sistemului în ansamblu au un grad mare de independență (de-coupling) Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 47. Componentele sistemului în ansamblu au un grad mare de independență (de-coupling) serviciile pot fi recompuse/orchestrate conform cerințelor sau contextului Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 48. Serviciile să nu depindă de starea comunicării (statelessness) Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 49. Serviciile să nu depindă de starea comunicării (statelessness) cantitatea de informație specifică unei activități ce trebuie reținută trebuie să fie minimală Dr. Sabin Buragawww.purl.org/net/busaco soa
  • 50. Dr. Sabin Buragawww.purl.org/net/busaco Exista o modalitate pragmatică privind dezvoltarea & invocarea serviciilor Web?
  • 51. Stil arhitectural de dezvoltare a aplicațiilor Web cu focalizare asupra reprezentării datelor teza de doctorat a lui Roy Fielding, 2000 Dr. Sabin Buragawww.purl.org/net/busaco rest: representational state transfer
  • 52. Viziune complementară de implementare și utilizare a serviciilor Web – fără SOAP Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 53. Rezultatul unei procesări conduce la obținerea unei reprezentări a unei resurse Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 54. Rezultatul unei procesări conduce la obținerea unei reprezentări a unei resurse resursă Web un utilizator având cont în cadrul unui sistem, blog-ul unei persoane, o fotografie, flux de știri, program etc. Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 55. 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: HTML, JPEG, PNG, PDF, Atom, JSON,… Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 56. Rezultatul unei procesări conduce la obținerea unei reprezentări a unei resurse reprezentare = (X)HTML, JPEG, PNG, PDF, Atom, JSON,… formatul reprezentării e desemnat de tipuri MIME text/html, image/png, application/json etc. Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 57. 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 (XHTML) reprezentare2 (Atom) resursa URI Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 58. Rezultatul unei procesări conduce la obținerea unei reprezentări a unei resurse fiecare reprezentare a unei resurse are asociat un URL URL URL reprezentare1 (XHTML) reprezentare2 (Atom) resursa URI Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 59. 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,… GET POST GET DELETE URL URL reprezentare1 (XHTML) reprezentare2 (Atom) resursa URI Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 60. 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 returnarea aceluiași răspuns (aceeași reprezentare) Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 61. 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. Sabin Buragawww.purl.org/net/busaco rest
  • 62. Verbele (acțiunile) sunt stipulate de protocolul HTTP POST creează o resursă (uzual, subordonată altei resurse) nu este nici safe, nici idempotentă utilizată când clientul nu cunoaște a-priori care va fi URI-ul resursei ce va fi create Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 63. Verbele (acțiunile) sunt stipulate de protocolul HTTP DELETE șterge (elimină) o resursă desemnată de un URI este idempotentă Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 64. 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. Sabin Buragawww.purl.org/net/busaco rest
  • 67. Transferul se realizează prin protocolul HTTP Dr. Sabin Buragawww.purl.org/net/busaco rest Reprezentarea este modelată conform unui format – e.g., XML sau JSON – și indicată prin tipuri MIME Adresabilitatea se rezolvă via URI
  • 68. Aplicațiile care invocă funcționalități (servicii) consumă reprezentări de resurse – în stilul pull Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 69. Fiecare cerere este considerată independentă, fără a se lua în considerație contextul stateless server Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 70. Reprezentările de resurse pot fi stocate temporar caching Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 71. client cache Dr. Sabin Buragawww.purl.org/net/busaco stateless server client cache adaptare dupa B. Mulloy (2012)
  • 72. client stateless server cache Dr. Sabin Buragawww.purl.org/net/busaco client fiecare cerere trebuie sa contina toate informatiile necesare procesarii cache adaptare dupa B. Mulloy (2012)
  • 73. contextul activitatilor nu-i stocat de server client stateless server cache Dr. Sabin Buragawww.purl.org/net/busaco client cache adaptare dupa B. Mulloy (2012)
  • 74. stateless server cache client cache clientul are dreptul sa reutilizeze datele receptionate Dr. Sabin Buragawww.purl.org/net/busaco client adaptare dupa B. Mulloy (2012)
  • 75. Aplicația Web dezvoltată va fi stratificată layered system Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 76. client firewall gateway load balan cer stateless server stateless server adaptare dupa B. Mulloy (2012) Dr. Sabin Buragawww.purl.org/net/busaco stateless server
  • 77. fiecare strat ofera servicii stratelor vecine client firewall gateway load balan cer stateless server stateless server adaptare dupa B. Mulloy (2012) Dr. Sabin Buragawww.purl.org/net/busaco stateless server
  • 78. firewall client gateway un strat nu poate “vedea” strate neinvecinate adaptare dupa B. Mulloy (2012) load balan cer stateless server stateless server Dr. Sabin Buragawww.purl.org/net/busaco stateless server
  • 79. client firewall gateway load balan cer stateless server stateless server stateless server adaptare dupa B. Mulloy (2012) Dr. Sabin Buragawww.purl.org/net/busaco stratele pot incapsula (“ascunde”) sisteme traditionale – blackbox
  • 80. client firewall gateway load balan cer are rol in asigurarea performantei/ fiabilitatii adaptare dupa B. Mulloy (2012) stateless server stateless server Dr. Sabin Buragawww.purl.org/net/busaco stateless server
  • 81. 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. Sabin Buragawww.purl.org/net/busaco rest: exemplu
  • 82. 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. Sabin Buragawww.purl.org/net/busaco rest: exemplu
  • 84. răspuns XML (Atom) oferit de serviciu Dr. Sabin Buraga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> digest MD5 <title>O resursa interesanta</title> <link href="/bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf"/> <summary> http://undeva.info/o-resursa-interesanta </summary> </entry> <!-- eventual, alte elemente <entry>… --> obținerea </feed> bookmark-urilor
  • 85. <bookmark> <title>O resursă de interes</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. Sabin Buragawww.purl.org/net/busaco GET /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf 200 OK Content-type: application/bookmark+xml
  • 86. POST /bookmarks Content-type: application/bookmark+xml … 201 Created Location: /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf PUT /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf Content-type: application/bookmark+xml … actualizarea 200 OK unui bookmark Dr. Sabin Buragawww.purl.org/net/busaco crearea unui bookmark
  • 87. 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 Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 88. O resursă poate avea asociate reprezentări ce pot fi accesate/alterate via operații HTTP operații CRUD – Create, Retrieve, Update, Delete Dr. Sabin Buragawww.purl.org/net/busaco rest
  • 89. Divizarea în 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. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 90. Numirea prin URI a fiecărei resurse exemplificări: http://aplicatie.info/Utilizator/tux http://aplicatie.info/Document/pinguini-cu-mere-albastre Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 91. Numirea prin URI a fiecărei resurse cazuri concrete: însemnările etichetate cu fii disponibile pe un blog http://fiistudent.wordpress.com/tag/fii/ accesarea datelor despre o producție cinematografică http://www.imdb.com/title/tt0401383/ obținerea listei utilizatorilor ce urmăresc o persoană http://twitter.com/followers Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 92. Numirea prin URI a fiecarei resurse cazuri concrete: acces la prezentările 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 acțiunii de editare a unui document XWiki http://www.info.uaic.ro/bin/edit/Students/Timetable Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 93. Interacțiunea cu un serviciu Web dezvoltat în stilul REST se poate face via un API (Application Programming Interface) alte detalii în cursul viitor pentru exemple de bune practici, a se consulta www.restapitutorial.com Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 94. Proiectarea reprezentarii(lor) acceptate ce pot fi trimise de aplicația client și reprezentării(lor) întoarse spre client de considerat formatele standard – e.g., HTML, Atom Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 95. Integrarea resurselor via legături hipertext + formulare Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 96. Crearea de studii de caz specificarea condițiilor de eroare și/sau de excepție, inclusiv aspecte privind controlul versiunilor API-ului Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  • 97. Dr. Sabin Buragawww.purl.org/net/busaco Aspecte practice de interes pentru dezvoltatori?
  • 98. URL-urile desemnând resurse (concepte) de interes trebuie să fie simple și intuitive utilizarea substantivelor pentru fiecare “lucru” colecții de resurse (uzual, la plural) /students identificatori unici pentru membrii unei colecții /students/tuxy (concret) vs. /students/69 (abstract) Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 99. Folosirea verbelor (metodelor) HTTP pentru efectuarea de operații asupra unor (colecții de) resurse resursa (URI) /students /students/69 (un URL deja existent) POST (creează) GET PUT DELETE (accesează) (actualizează) (șterge) creează listează studenții un student nou existenți eroare  oferă date despre student actualizează un set de studenți șterge toți studenții dacă există, actualizează, altfel eroare șterge studentul respectiv Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 100. Tratarea erorilor folosirea codurilor de stare HTTP 200 – OK 303 – See Other 400 – Bad Request, 404 – Not Found 500 – Internal Server Error Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 102. Tratarea erorilor mesajele returnate trebuie să includă informații utile exemplu: Twilio – cod de stare HTTP întors: 401 { "status": "message": "code": "more info": } "401", "Authenticate", 20003, "http://www.twilio.com/docs/errors/20003" Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 103. 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 http://feeds.delicious.com/v2/{format}/{username} Facebook – ?v=1.0 Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 104. Paginarea & oferirea de răspunsuri parțiale uzual, se folosesc parametri precum limit și offset /students?limit=33&offset=54 filtrele opționale (e.g., în contextul faceted search) pot fi delimitate de virgulă /students?fields=name,age,year,email Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 105. Dr. Sabin Buragawww.purl.org/net/busaco privire pragmatica interogări interactive asupra API-ului oferit de The New York Times http://developer.nytimes.com/
  • 106. Paginarea & 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 Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 107. Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica 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)
  • 108. Utilizarea subdomeniilor pentru API-uri diferite ale aceluiași ofertant de servicii exemplificare: search.twitter.com stream.twitter.com api.twitter.com Dr. Sabin Buragawww.purl.org/net/busaco rest: privire pragmatica
  • 109. Dr. Sabin Buragawww.purl.org/net/busaco Cum pot fi accesate reprezentări de resurse Web prin REST?
  • 110. 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. Sabin Buragawww.purl.org/net/busaco rest: implementare
  • 111. Studiu de caz: acces la Wikipedia folosim URL-ul http://en.wikipedia.org/w/api.php?action=query& prop=categories&titles=Category:Arts&format=format pentru a obține date despre categoriile asociate artelor în diverse formate (JSON, XML, text obișnuit,…) detalii la www.mediawiki.org/wiki/API Dr. Sabin Buragawww.purl.org/net/busaco rest: implementare
  • 112. Dr. Sabin Buragawww.purl.org/net/busaco HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Thu, 25 Apr 2013 17:01:59 GMT Content-Type: text/xml; charset=utf-8 <api> <query> <pages> <page pageid="4892515" ns="14" title="Category:Arts"> <categories> <cl ns="14" title="Category:Creativity"></cl> <cl ns="14" title="Category:Culture"></cl> <cl ns="14" title="Category:Humanities"></cl> <cl ns="14" title="Category:Main topic classifications"></cl> </categories> </page> </pages> răspuns XML furnizat de serviciul Web </query> implementat de Wikipedia </api>
  • 114. Studiu de caz: accesarea datelor publice oferite de Science Museum (Londra) se recurge la URL-ul http://api.sciencemuseum.org.uk/exhibitions/?output=json pentru a obține mesajele publice în format JSON detalii la http://api.sciencemuseum.org.uk/ Dr. Sabin Buragawww.purl.org/net/busaco rest: implementare
  • 115. { "exhibitions": [ { "id" "name" "admission_fee" "opened_on" "closed_on" "closed" "website" }, { … } ], "maximum" "returned" } : "1031", : "Dan Dare & the Birth of Hi-tech Britain", : false, : "2008-04-30", : "2009-10-24", : null, : "http://www.sciencemuseum.org.uk/..." : 1000, : 91 Cum putem valida corectitudinea răspunsului JSON obținut? Ce schemă e folosită? Dr. Sabin Buragawww.purl.org/net/busaco HTTP/1.1 200 OK Date: Mon, 30 Sep 2013 16:05:22 GMT Content-Type: application/json Server: Microsoft-IIS/6.0
  • 116. 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. Sabin Buragawww.purl.org/net/busaco rest: implementare
  • 117. 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 atenție la problemele de securitate ce pot apărea! Dr. Sabin Buragawww.purl.org/net/busaco rest: implementare
  • 118. 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) Dr. Sabin Buragawww.purl.org/net/busaco rest: implementare
  • 119. Dr. Sabin Buragawww.purl.org/net/busaco rest: implementare Exemplificare recurgând la biblioteca jQuery (JavaScript): jQuery.ajax ({ // execută 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", // dorim răspunsul în format JSON success: function(data) { // funcție apelată la transfer cu succes $('.rezultat').html(data); // preluăm datele, convertindu-le în HTML } });
  • 120. 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. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 121. 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,… 6395 API-uri (06 oct. 2013) – http://tinyurl.com/2ssfc2 inclusiv API publice disponibile pentru C++, C#, Java, JavaScript, PHP, Python, Objective-C, Ruby,… Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 122. 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 Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 123. 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 Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 124. 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. Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 125. 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 Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 126. 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), apoi va putea autoriza aplicația să aiba acces la date via serviciul Web furnizat Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 127. 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 Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 128. 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) Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare
  • 129. Autorizarea securizată a unei aplicații să acceseze date private într-un mod standardizat se poate realiza via OAuth Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – oauth
  • 130. Autorizarea securizată a unei aplicații să acceseze date private într-un mod standardizat se poate realiza via OAuth protocol deschis OAuth 1.0 (2010), OAuth 2.0 (2012) http://oauth.net/ Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – oauth
  • 131. Exemplificări concrete: Evernote, Facebook, Google, Ohloh, OpenSocial, Photobucket, TripIt, Twitter, Vimeo, Windows Live, Yahoo!, Yammer,... pot fi utilizate diverse biblioteci disponibile pentru C#, Java, Objective-C, Perl, PHP, Python, Ruby etc. http://oauth.net/code/ Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – oauth
  • 132. OpenID mecanism descentralizat de autentificare a utilizatorului la nivel de Web pe baza paradigmei SSO – Single Sign On Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – openid via un ofertant (serviciu) de identitate (identity provider), utilizatorii pot să-și gestioneze prezențe online multiple http://openid.net/
  • 133. OpenID fiecare identitate e desemnată de un URL (stabilit de identity provider): me.yahoo.com, nume.wordpress.com, google.com/profiles/nume, launchpad.net/~nume etc. pentru a-și confirma identitatea, utilizatorul va trebui să se autentifice: nume de cont + parolă, smart card, date biometrice,… Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – openid
  • 134. OpenID biblioteci open source disponibile pentru C#, Java, Perl, PHP, Python, Ruby,… http://openid.net/developers/libraries/ http://www.janrain.com/openid-enabled Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – openid
  • 135. Mozilla Persona soluție de autentificare unică (în stilul SSO) la nivel de browser Web identitatea utilizatorului e dată de adresa de e-mail http://developer.mozilla.org/Persona http://github.com/mozilla/browserid-cookbook Dr. Sabin Buragawww.purl.org/net/busaco rest: dezvoltare – mozilla persona
  • 136. aplicații orientate spre servicii Web în stilul REST Dr. Sabin Buragawww.purl.org/net/busaco rezumat
  • 137. Dr. Sabin Buragawww.purl.org/net/busaco episodul viitor: ingineria aplicațiilor Web de la API-uri & mashup-uri la proiectare arhitecturală