Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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 comunic...
partajarea cunoștințelor
Web social (“Web 2.0”), Web-ul datelor (semantic),…

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

C...
accesul la Web se poate realiza
via dispozitive având resurse reduse

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

Exploatare...
accesul la Web se poate realiza
via dispozitive având resurse reduse
Web ubicuu (omniprezent), Web mobil, Web 3D,…
perform...
Dr. Sabin Buragawww.purl.org/net/busaco

Cum pot fi accesate & procesate resursele
– date, informații, cunoștințe –
dispo...
Soluții multi-platformă, slab-conectate
integrare (în timp-real) la nivel de Internet/Web
a aplicațiilor, serviciilor și s...
Soluții multi-platformă, slab-conectate
integrare (în timp-real) la nivel de Internet/Web
a aplicațiilor, serviciilor și s...
Soluții multi-platformă, slab-conectate
datele să poată fi descrise pentru a fi “înțelese”
de calculatoare și pentru a fi ...
Soluții multi-platformă, slab-conectate
datele să poată fi descrise pentru a fi “înțelese”
de calculatoare și pentru a fi ...
Servicii atașabile (pluggable) & versatile

Software as a Service – SaaS
Application Service Provider – ASP

Dr. Sabin Bur...
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
î...
Divizarea aplicațiilor în servicii – independente –
care se pot compune,
menite a se conecta și orchestra în mod spontan
î...
“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
– bazat...
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
permit(e) localizarea transparentă a serviciilor

D...
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
facilitează adăugarea, înlocuirea, eliminarea
servi...
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
ascund(e) dezvoltatorului detaliile de sistem

Dr. ...
“The Web is the computer”
disponibilitatea unei/unor arhitecturi care…
asigură calitatea dezvoltării și exploatării
aplica...
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 ...
Software oferind o funcționalitate specifică
acces la resurse – Delicious, Pinterest, Slideshare, Vimeo
agregare de știri ...
Accesate standardizat via Web
URI
HTTP
XML și/sau alte formate (e.g., JSON)

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

ser...
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 (...
Arhitectura generică a unei aplicații Web
(3-tier application)
Internet
(Web)

Client
(interface)

Server de aplicații Sto...
Cream / Markup

Custard / Page Logic

Jelly / Business Logic

Sponge / Database

C. Henderson, “Scalable Web Architectures...
Cream / Markup

Custard / Page Logic

Jelly / Business Logic

Sponge / Database

C. Henderson, “Scalable Web Architectures...
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
limbaj de marcare – e.g., HTML
stiluri de prezentar...
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
cererile sunt capt(ur)ate via formulare
+ legături ...
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
utilizatorii umani trebuie să interpreteze etichete...
Tradițional, aplicația oferă o interfață-utilizator
disponibilă pe Web
serviciul implementat oferă un răspuns
(o reprezent...
Cum obținem răspunsul pentru a fi (re)folosit
în programele noastre?
procesarea datelor din codul HTMLWeb scrapping

Dr. ...
Cum obținem răspunsul pentru a fi (re)folosit
în programele noastre?

???!
orice modificare în marcajerescrierea programu...
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-...
posibile soluții:
XML-RPC

“dialog”
prin XML

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

Dr. Sabin Buraga...
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 ap...
Paradigma de dezvoltare a software-ului
care adoptă folosirea de servicii,
oferind funcționalități solicitate de utilizato...
Paradigma de dezvoltare a software-ului
care adoptă folosirea de servicii,
oferind funcționalități solicitate de utilizato...
Dr. Sabin Buragawww.purl.org/net/busaco

soa

Douwe Osinga & Jon Tirsen, “Architecture of the Triposo travel guide”,
QCon...
Componentele sistemului în ansamblu
au un grad mare de independență (de-coupling)

Dr. Sabin Buragawww.purl.org/net/busac...
Componentele sistemului în ansamblu
au un grad mare de independență (de-coupling)
serviciile pot fi recompuse/orchestrate
...
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 trebu...
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 ...
Viziune complementară de implementare și
utilizare a serviciilor Web – fără SOAP

Dr. Sabin Buragawww.purl.org/net/busaco...
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse

Dr. Sabin Buragawww.purl.org/net/busaco
...
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
resursă Web
un utilizator având cont în ca...
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
reprezentare pe baza unui format de date
t...
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
reprezentare = (X)HTML, JPEG, PNG, PDF, At...
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
reprezentările aceleași resurse
– desemnat...
Rezultatul unei procesări conduce la obținerea
unei reprezentări a unei resurse
fiecare reprezentare a unei resurse are as...
Clienții (e.g., navigatoare Web, roboți, player-e etc.)
interacționează cu reprezentările resurselor via verbe
“accesează”...
Verbele (acțiunile) sunt stipulate de protocolul HTTP
GET
scop: accesarea (citirea) unei reprezentări de resursă
nu conduc...
Verbele (acțiunile) sunt stipulate de protocolul HTTP
PUT
actualizează o reprezentare de resursă sau
eventual creează o re...
Verbele (acțiunile) sunt stipulate de protocolul HTTP
POST
creează o resursă (uzual, subordonată altei resurse)
nu este ni...
Verbele (acțiunile) sunt stipulate de protocolul HTTP
DELETE
șterge (elimină) o resursă desemnată de un URI
este idempoten...
Orice accesare a unei reprezentări
plasează aplicația – ori clientul Web – într-o stare
ce va fi schimbată în urma unui tr...
http://blog.info/
reprezentare1
(XHTML)
resursa1

reprezentare2
(XHTML)

GET

POST
resursa2

http://blog.info/stiri

GET

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

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

reprezentare2
(XHTML)

GET

POST
resursa2

http:...
Transferul se realizează prin protocolul HTTP

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

rest

Reprezentarea este modelată...
Aplicațiile care invocă funcționalități (servicii)
consumă reprezentări de resurse – în stilul pull

Dr. Sabin Buragawww....
Fiecare cerere este considerată independentă,
fără a se lua în considerație contextul
stateless server

Dr. Sabin Buragaw...
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...
contextul activitatilor
nu-i stocat de server

client

stateless server

cache

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

...
stateless server

cache

client
cache

clientul are dreptul
sa reutilizeze datele
receptionate

Dr. Sabin Buragawww.purl....
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 Bu...
fiecare strat ofera
servicii stratelor
vecine

client

firewall

gateway

load
balan
cer

stateless
server

stateless
serv...
firewall

client

gateway

un strat nu poate
“vedea” strate
neinvecinate

adaptare dupa B. Mulloy (2012)

load
balan
cer

...
client

firewall

gateway

load
balan
cer

stateless
server

stateless
server

stateless
server
adaptare dupa B. Mulloy (2...
client

firewall

gateway

load
balan
cer

are rol in asigurarea
performantei/
fiabilitatii

adaptare dupa B. Mulloy (2012...
Serviciu pentru managementul adreselor Web favorite
(bookmark-uri), cu posibilitatea atașării de
termeni de conținut (tag-...
Serviciu pentru managementul adreselor Web favorite
(bookmark-uri), cu posibilitatea atașării de
termeni de conținut (tag-...
Metoda
rest: exemplu

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

GET
PUT
DELETE

Reprezentare
application/boo...
răspuns XML (Atom)
oferit de serviciu
Dr. Sabin Buragawww.purl.org/net/busaco

GET /bookmarks
200 OK
Content-type: applic...
<bookmark>
<title>O resursă de interes</title>
<url>http://undeva.info/o-resursa-interesanta</url>
<user href="/users/tux"...
POST /bookmarks
Content-type: application/bookmark+xml
…
201 Created
Location: /bookmarks/a211528fb5108cddaa4b0d3aeccdbdcf...
Resursele se denumesc folosind URI-uri (URL-uri)
Reprezentările sunt interconectate prin URL-uri
Pot exista intermediari (...
O resursă poate avea asociate reprezentări
ce pot fi accesate/alterate via operații HTTP

operații CRUD – Create, Retrieve...
Divizarea în resurse a setului de date
ale problemei
clase tipice de resurse:
Utilizator
Document – alternative: Fotografi...
Numirea prin URI a fiecărei resurse
exemplificări:

http://aplicatie.info/Utilizator/tux
http://aplicatie.info/Document/pi...
Numirea prin URI a fiecărei resurse
cazuri concrete:
însemnările etichetate cu fii disponibile pe un blog
http://fiistuden...
Numirea prin URI a fiecarei resurse
cazuri concrete:
acces la prezentările Slideshare ale utilizatorului busaco
http://www...
Interacțiunea cu un serviciu Web dezvoltat în stilul REST
se poate face via un API
(Application Programming Interface)
alt...
Proiectarea reprezentarii(lor) acceptate
ce pot fi trimise de aplicația client
și reprezentării(lor) întoarse spre client
...
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 versiu...
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 fiec...
Folosirea verbelor (metodelor) HTTP pentru efectuarea
de operații asupra unor (colecții de) resurse
resursa
(URI)
/student...
Tratarea erorilor
folosirea codurilor de stare HTTP
200 – OK
303 – See Other
400 – Bad Request, 404 – Not Found
500 – Inte...
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
{...
Controlul versiunilor API-ului dezvoltat
“Never release an API without a version
and make the version mandatory.” (Mulloy,...
Paginarea & oferirea de răspunsuri parțiale
uzual, se folosesc parametri precum limit și offset
/students?limit=33&offset=...
Dr. Sabin Buragawww.purl.org/net/busaco

privire pragmatica

interogări interactive asupra API-ului oferit de The New Yor...
Paginarea & oferirea de răspunsuri parțiale
exemplificări reale:
Delicious – /v1/posts/recent?count=30&tag=web
Twitter – a...
Dr. Sabin Buragawww.purl.org/net/busaco

rest: privire pragmatica
Eterogenitatea formatelor reprezentărilor întoarse
indi...
Utilizarea subdomeniilor pentru API-uri diferite
ale aceluiași ofertant de servicii
exemplificare:
search.twitter.com
stre...
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)
Ne...
Studiu de caz: acces la Wikipedia
folosim URL-ul
http://en.wikipedia.org/w/api.php?action=query&
prop=categories&titles=Ca...
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...
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....
{ "exhibitions": [
{ "id"
"name"
"admission_fee"
"opened_on"
"closed_on"
"closed"
"website"
},
{
…
} ],
"maximum"
"returne...
Biblioteci/API-uri implementând HTTP
permit dezvoltarea de aplicații desktop, mobile etc.
suport pentru crearea de mash-up...
Biblioteci/API-uri implementând HTTP
permit dezvoltarea de aplicații desktop, mobile etc.
suport pentru crearea de mash-up...
Navigatoarele Web actuale
nu necesită o interfață de programare (API) specifică
disponibilitate pe orice platformă
suport ...
Dr. Sabin Buragawww.purl.org/net/busaco

rest: implementare
Exemplificare recurgând la biblioteca jQuery (JavaScript):
jQ...
ASP.NET MVC (C#)
JAX-RS – Java Architecture for RESTful web Services
Jifty (Perl)
neon (C)
Restlet (Java)
RIP – REST in Py...
Servicii publice ce pot fi consumate via REST – exemple:
500px, AIDSInfo, Amazon, Basecamp, Blip.tv, DBpedia,
eBay, Ericss...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(1) înregis...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(2) pe baza...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(2) pe baza...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(3) autenti...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(3) autenti...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(4) aplicaț...
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoca un serviciu Web pe baza unui API public:
(4) aplicaț...
Autorizarea securizată a unei aplicații să acceseze
date private într-un mod standardizat
se poate realiza via OAuth

Dr. ...
Autorizarea securizată a unei aplicații să acceseze
date private într-un mod standardizat
se poate realiza via OAuth
proto...
Exemplificări concrete:
Evernote, Facebook, Google, Ohloh, OpenSocial,
Photobucket, TripIt, Twitter, Vimeo, Windows Live,
...
OpenID
mecanism descentralizat de autentificare a utilizatorului
la nivel de Web pe baza paradigmei SSO – Single Sign On

...
OpenID
fiecare identitate e desemnată de un URL (stabilit de
identity provider): me.yahoo.com, nume.wordpress.com,
google....
OpenID
biblioteci open source disponibile
pentru C#, Java, Perl, PHP, Python, Ruby,…
http://openid.net/developers/librarie...
Mozilla Persona
soluție de autentificare unică (în stilul SSO)
la nivel de browser Web
identitatea utilizatorului e dată d...
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 proiec...
Upcoming SlideShare
Loading in …5
×

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

510 views

Published on

Dezvoltarea aplicațiilor Web (2/12) — detalii la http://profs.info.uaic.ro/~busaco/teach/courses/wade/web-film.html

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. servicii Web în stil REST Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea aplicațiilor Web
  2. 2. Aristotel Dr. Sabin Buragawww.purl.org/net/busaco “Prima calitate a stilului este claritatea.”
  3. 3. Dr. Sabin Buragawww.purl.org/net/busaco Care sunt scopurile Web-ului?
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 14. Dr. Sabin Buragawww.purl.org/net/busaco Există un model arhitectural de dezvoltare a serviciilor la nivel de Web?
  15. 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. 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. 17. “The Web is the computer” Dr. Sabin Buragawww.purl.org/net/busaco solutie
  18. 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. 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. 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. 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. 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
  23. 23. Dr. Sabin Buragawww.purl.org/net/busaco servicii web
  24. 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. 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. 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
  27. 27. Dr. Sabin Buragawww.purl.org/net/busaco Cum am implementa un serviciu?
  28. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 40. Dr. Sabin Buragawww.purl.org/net/busaco Există un model arhitectural de dezvoltare a serviciilor la nivel de Web?
  41. 41. Arhitectura orientată spre servicii SOA – Service Oriented Architecture Dr. Sabin Buragawww.purl.org/net/busaco soa
  42. 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. 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. 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. 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. 46. Componentele sistemului în ansamblu au un grad mare de independență (de-coupling) Dr. Sabin Buragawww.purl.org/net/busaco soa
  47. 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. 48. Serviciile să nu depindă de starea comunicării (statelessness) Dr. Sabin Buragawww.purl.org/net/busaco soa
  49. 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. 50. Dr. Sabin Buragawww.purl.org/net/busaco Exista o modalitate pragmatică privind dezvoltarea & invocarea serviciilor Web?
  51. 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. 52. Viziune complementară de implementare și utilizare a serviciilor Web – fără SOAP Dr. Sabin Buragawww.purl.org/net/busaco rest
  53. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  65. 65. 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
  66. 66. 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)
  67. 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. 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. 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. 70. Reprezentările de resurse pot fi stocate temporar caching Dr. Sabin Buragawww.purl.org/net/busaco rest
  71. 71. client cache Dr. Sabin Buragawww.purl.org/net/busaco stateless server client cache adaptare dupa B. Mulloy (2012)
  72. 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. 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. 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. 75. Aplicația Web dezvoltată va fi stratificată layered system Dr. Sabin Buragawww.purl.org/net/busaco rest
  76. 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. 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. 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. 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. 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. 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. 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
  83. 83. 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ă
  84. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 95. Integrarea resurselor via legături hipertext + formulare Dr. Sabin Buragawww.purl.org/net/busaco rest: metodologie
  96. 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. 97. Dr. Sabin Buragawww.purl.org/net/busaco Aspecte practice de interes pentru dezvoltatori?
  98. 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. 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. 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
  101. 101. http://httpstatus.es/ Dr. Sabin Buragawww.purl.org/net/busaco privire pragmatica
  102. 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. 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. 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. 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. 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. 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. 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. 109. Dr. Sabin Buragawww.purl.org/net/busaco Cum pot fi accesate reprezentări de resurse Web prin REST?
  110. 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. 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. 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>
  113. 113. Dr. Sabin Buragawww.purl.org/net/busaco reprezentarea JSON echivalentă
  114. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 136. aplicații orientate spre servicii Web în stilul REST Dr. Sabin Buragawww.purl.org/net/busaco rezumat
  137. 137. Dr. Sabin Buragawww.purl.org/net/busaco episodul viitor: ingineria aplicațiilor Web de la API-uri & mashup-uri la proiectare arhitecturală

×