Sunteți pe pagina 1din 30

Sisteme distribuite Tehnologii

9. REST si Web 2.0


Decembrie 4, 2009

Representational State Transfer

Termen aparut in 2000


Stil arhitectural
O metoda de transport media utilizat in mod primar
peste WWW, dei nu este restrrictionat la acesta
Este constrit ca sistem hiper-mediaWebul este cela
mai mare
Termenul defineste principiile arhitecturale de transfer
peste sisteme,
Este orientat in special asupra transferului datelor
peste HTTP fara utilizarea unui nivel de transmitere
aditional, precum SOAP.
2

Filozofia care conduce la REST

Modalitatea de design a unui aplicatii Web:

Identificarea conceptelor sale de baza,


Modelarea lor ca resurse,
Asignarea lor de identificatori unice de resurse (URI).

Agenti software, precum navigatoarele Web sau aplicatiile Web,solicita


aceste resurse, specificand formatul preferat de reprezentare
Serviciul Web raspunde prin reprezentarea resursei catre agent in
formatul care este cel mai apropriat de cerere.
Selectarea celei mai bune reprezentari este referita ca si negociere de
context.
Agentul trece atunci la urmatoarea stare bazandu-se pe continutul
resursei primite tipic continand hiper-linkuri la alte resurse
Hiper-linkurile sunt apoi utilizate pentru cererile urmatoare, care
cauzeaza tranzitia agentului la o stare noua

Prima idee de baza: hiper-link

Reprezentarea unei resurse va contine adesea


legaturi la alte resurse
Un agent va urmari aceste legaturi pentru a obtine
informatia
In context WS, aceasta inseamna ca mesajele
schimbate vor contine referinte la alte WSuri.
O descriere concreta a serviciului Web trebuie de
asemenea sa descrie interfetele acestor referinte la
alte servicii Web

A doua idee: interfata uniforma

Exista un set standard de verbe sau metode


care sunt utilizate pentru a accesa orice
resursa
In HTTP, metodele cela mai comunesunt
PUT, GET, POST, si DELETE, care
corsepunde cu operatiunile Create, Retrieve,
Update, si Delete (CRUD) pe baze de date
In practica, majoritatea aplicatiilor Web
utilizeaza doar GET si POST.
5

GET

Trebuie sa fie utilizat pentru operatii care sunt sigure, ceea ce


inseamna ca sunt idempotente si nu impune obligatii
Idempotenta inseamna ca rezultatul in urma efectuarii de doua
ori a operatiei este aceeasi ca si daca este efectuata odata
Exemplu: obtinerea balantei contului este idempotenta, dar
retragerea banilor nu este
O obligatie poate fi ceva precum taxarea contuli pentru o operatie
Operatiile sigure admit anumite optimizari precum prefetching si
caching.
Exemplu: un navigator Web poate opta pentru prefetching a
paginilor legate si aplica caching la rezultatelor pentru a
imbunatati timpul de raspuns si reduce traficul de retea

Negocierea continutului

Mecanismul prin care agentul poate specifica tipurile de reprezentari ale resursei pe
care le prefera sa le receptioneze ca raspuns la o cerere
Exemplu: pp. un navigator Web care cere o pagina HTML.

Parte cererii este un antet HTTP Accept care listeaza tipurile de imagini care poate fi
randata de navigatorul Web, cu greutati care indica preferintele sale.
Cand aplicatia Web receptioneaza cererea,

Inspecteaza antetul Accept si


Genereaza o pagina Web pentru legaturi la tipul de imagine care se protriveste cela mai bine la
preferintele navigatorului Web.

Un mecanism similar poate fi utilizat pentru specificarea limbajului natural dorit la raspuns

Negocierea contextului se aplica si la servicii Web.


De exemplu

Un client AJAX poate prefera un raspuns codat in JSON ca prima alegere, apoi XML, si in
final SOAP, deoarece aceasta este ordinea care minimizeaza timpul de parsare
Clientul include un antet Accept in cererea sa indicand ca accepta aceste tipuri media si
apoi asigneaza preferinte adecvate
Clientul AJAX receptioneaza raspunsul in format care este mai eficient pentru a-l procesa
daca serviciul Web il ofera, dar poate totusi functiona daca serviciile Web ofera formate
acceptabile.
WSul poate fi atualizat la o data ulterioara pentru a imbunati erformanta si clientii vor
beneficia autoat de modificarile respective

Componentele cheie ale designului RESTful


1.

2.

3.

4.

Starea si functionalitatea unei aplicatii sunt


separate in resurse diferite.
Fiecare resursa partajeaza o metoda
consistenta pentru transferul starii intre
resurse
Fiecare resursa este adresabila utilizand o
sintaxa hiper-media
Este un protocol care este fara stare,
cacheable, bazat pe client/server, si pe
straturi.
8

World Wide Web

Este exemplul perfect pentru implementare RESTful, pentru ca


poate se poate conforma principiilor REST.
HTML
Are suport implicit pentru hiper-linkuri in limbaj
Are metode consistente (GET, POST, PUT, si DELETE) pentru
accesarea resurselor din URIuri, metode, coduri de stare, si
antete.
HTTP
Este fara stare (daca nu sunt utilizati cookies),
Are abilitatea de control a cachingului,
Utilizeaza notiunea de client si de server
Este stratificat a.i. nici un nivel nu poate cunoaste nimic despre
celalalt expectand conexiunea imediata prin conversare

Tringhiul REST

Interfata = verb,
Tipurile de continut
Identificator de resurse
= substantiv (noun).
REST defineste
substantivele care fiind
neconstranse a.i. clientii
nu trebuie sa cunoasca
intreaga resursa

10

SOA sau REST?

1.

2.

Arhitectura care este utilizata in aplicatii depind de


WSurile cu care interactioneaza
Daca cunoastem ca unica interfata la WS este prin
SOAP, este natural ca arhitectura aplicatiei sa fie
definita ca urmarind SOA.
Daca WS este RESTful, construirea aplicatiei pentru a
urmari principiile REST este adecvat.
Fiecare componenta a unei aplicatii poate fi construita
intr-o modalitate, iar alta intr-o modalitate diferita
Aplicatia ca intreg orice stil arhitectural care este
necesar pt. proiect (client/server, Model-ViewController MVC, etc.), pe cand componentele
urmaresc propriile modele pe cat ai eficient posibil

11

Servicii Web in stil REST

Anumiti vendori, precum Amazon, ofera atat interfete SOAP cat si REST
Amazon 2003: 85 % din utilizarile WS s-au realizat prin interfata REST.

SOAP 1.1

Aceasta preferinta este datorata faptului ca utilizarea principala a WS Amazon este


aceea de a oferi legaturi produs pentru pagini Web.
Interfertele in stil REST sunt mai usor de utilizat
Majoritatea motoarelor utilizeaza un singur URL care actioneaza ca un router pentru
cererile de servicii
Motorul SOAP examineaza cererea de determinare a operatie si invoca implementarea
serviciului asociata cu acesta
SOAP 1.1 peste HTTP utilizeaza intotdeauna POST, astfel incat toate operatiile sunt
tratate ca fiind nesigure.

WSDL 1.1

Defineste toate legaturile HTTP, una pentru GET si alta pentru POST.

Aceasta inseamna ca nu se poate descrie un serviciu care are o combinatie de operatii sigure si
operatii nesigure
De asemenea nu se poate utiliza intotdeauna metoda corecta HTTP pentru orice operatie pentru
ca PUT, DELETE, nu sunt suportate.

Nu ofere nici o modalitate de a descrie mesaje care se refera la alte WSuri, adica n-are
suport pentru hiper-linking.

12

SOAP 1.1 si WSDL 1.1

Sunt ostile REST.


Aceste specificatii ofera bazele oentru o multime
mare si bogata de specificatii aditionale referite ca
WS-*.

WS-Security, WS-Reliability, si WS-Addressing sunt cateva


exemple
Modalitatea de a gandi despre WS-* este aceea de a defini
o modalitate de scurge mesajele WSurilor peste hopuri
multiple de transpot implicand o combinatie de protocoale
De exemplu, un serviciu Web de companie poate
receptiona o cerere peste HTTP si s-o plaseze intr-o coada
de mesaje

13

SOAP 1.2 si WSDL 2.0

aduce lumea WSurilor intr-o aliniere mai buna cu


principiile arhitecturii REST.
SOAP 1.2 suporta utilizarea GET pentru cereri.
WSDL 2.0

Permite descrierea operatiilor sigure


O legare HTTP imbunatatita si
Include suport pentru descrierea mesajelor care se refera
la alte WSuri;
hiper-linking intre serviciile Web pot fi descrise

La intrarea in era tehnologiilor Web 2.0, putem


vedea o unificare a stilurilor WS, WS-* si REST,
bazate pe SOAP 1.2 si WSDL 2.0.
14

Web 2.0

15

Syndication-1

Tipul de sindicat in care sectiunile dintr-un site Web


sunt facute disponibile pentru altele pentru utilizare,
majoritatea utiizand XML ca agent de transport.
News, vreme, si site-urile blog sunt intotdeauna
sursele comune pentru sindicare,

Dar nu exista o limitare de unde poate veni o alimentare

RSS este parte a unei familii de standarde care


toate utilizeaza XML pentru structura lor de baza
RDF, baza pentru RSS 1.0, este un standard W3C

16

Syndication-2

Deoarece toate versiunile diferite de RSS si problemele acestora au


creat confuzii, un alt grup a inceput sa lucreze la o specificatie noua
numita Atom.
In iulie 2005, IETF a acceptat Atom 1.0 ca si propunere de standard.
Exsita mai multe diferente majore intre Atom 1.0 si RSS 2.0.
Atom 1.0 este

Intr-un spatiu de nume XML,


Are un tip MIME inregistrat,
Include o schema XML si
S-a supus unui proces de standardizare

RSS 2.0

Nu este intr-un spatiu de nume


Este adeasa trimis ca aplicatie/rss+xml dar nu are un tip MIME inregistrat,
Nu are o schema XML si
Nu este standardizat si nu poate fi modificat.

17

XSLT

Limbaj bazat pe XML utilizat pentru a transforma si formata


documente XML.
In 1999, XSLT version 1.0 a devenit recomandare W3C.
Din 2007, XSLT version 2.0 este o recomandare care lucreaza
impreuna cu XPath 2.0.
XSLT utilizeaza XPath pentru a identifica submultimi ale arborelui
documentului XML si pentru a efectua calcule la interogare
XSLT preia un document XML si creaza un nou document cu toate
transformarile, lasand documentul original XML intact.
In context Ajax, transformarea produce in mod uzual XHTML

18

Alimentatori Web (feeds) o alta


modalitate de acces la date

Web feeds sunt documente bazate pe XML structurate cu RSS sau Atom.

O modalitate de a crea un alimentator este de a scrie un script care viziteaza


pagini si strange date din acestea

Web scraping (strangere) nu este modalitatea cea mai nobila de colectare date si
poate incalca drepsturile de proprietate

Utilizarea unui alimentator pentru a strange informatie este o modalitate buna de


creare a WSurilor

Alimentatorii sunt generati in diferite modurisi sunt static prin natura

Alimentatoarele pot fi stranse la server si diseminate la clienti cand este ceruta


informatia
Este o solutie buna pentru colectarea titlurilor si descrierilor dintr-o sursa care poate
nu ofera WSuri pentru a obtine informatia
Dezavantajul major este aflarea la dispozitia furmizorului [Ceea ce furnizorul plaseaza
in alimentator este ceea se obtine].

Feed aggregators (agregatori de alimentatori) strang alimentatorii de la


furmizorii de continut si le agregheaza intr-o modalitate mai usoara pentru a
obtine date pemtru or aplicatie

Exemplu: Google Reader, de la http://www.google.com/reader. Aplicatia preia


alimentarorii de la surse diferite (in timp real) si permite cele care subscriu sa-si
customizeze selectiile
19

Exemplu: feed de la Yahoo! Weather


(http://weather.yahooapis.com/forecastrss?p=62221)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<rss version="2.0
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<channel>
<title>Yahoo! Weather - Belleville, IL</title>
<link>
http://us.rd.yahoo.com/dailynews/rss/weather/Belleville_IL/*
http://weather.yahoo.com/forecast/62221_f.html
</link>
<description>Yahoo! Weather for Belleville, IL</description>
<language>en-us</language>
<lastBuildDate>Tue, 13 Mar 2007 11:55 am CDT </lastBuildDate>
<ttl>60</ttl>
<yweather:location city="Belleville" region="IL" country="US" />
<yweather:units temperature="F" distance="mi" pressure="in"
speed="mph" />
<yweather:wind chill="77" direction="210" speed="14" />
<yweather:atmosphere humidity="50" visibility="1609"
pressure="30.07" rising="2" />
<yweather:astronomy sunrise="7:15 am" sunset="7:05 pm" />
<image>
<title>Yahoo! Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com/</link>
<url>http://l.yimg.com/us.yimg.com/i/us/nws/th/main_142b.gif</url>
</image>
<item>
<title>Conditions for Belleville, IL at 11:55 am CDT</title>
<geo:lat>38.5</geo:lat>
<geo:long>-90</geo:long>

<link>
http://us.rd.yahoo.com/dailynews/rss/weather/Belleville_IL/*
http://weather.yahoo.com/forecast/62221_f.html
</link>
<pubDate>Tue, 13 Mar 2007 11:55 am CDT</pubDate>
<yweather:condition text="Fair" code="34" temp="77"
date="Tue, 13 Mar 2007 11:55 am CDT" />
<description>
<![CDATA[
<img src="http://l.yimg.com/us.yimg.com/i/us/we/52/34.gif" /><br />
<b>Current Conditions:</b><br />
Fair, 77 F<BR /><BR />
<b>Forecast:</b><BR />
Tue - Partly Cloudy. High: 81 Low: 58<br />
Wed - Partly Cloudy. High: 76 Low: 55<br /> <br />
<a href="http://us.rd.yahoo.com/dailynews/rss/weather/
Belleville_IL/*
http://weather.yahoo.com/forecast/62221_f.html">
Full Forecast at Yahoo! Weather
</a><BR/>
(provided by The Weather Channel)<br/>
]]>
</description>
<yweather:forecast day="Tue" date="13 Mar 2007" low="58"
high="81"
text="Partly Cloudy" code="30" />
<yweather:forecast day="Wed" date="14 Mar 2007" low="55"
high="76"
text="Partly Cloudy" code="30" />
<guid isPermaLink="false">62221_2007_03_13_11_55_CDT</guid>
</item>
</channel>
</rss>

20

PHP code care transforma acest alimentator intrun servivciu Web tip REST
<?php
/* Using feeds to distribute information with PHP.
* This example shows how to take an RSS feed and strip out the information
* desired by the application, giving only a minimal amount of data to the client.*/
/* Get the RSS feed from Yahoo! for my zip code */
$results = file_get_contents('http://weather.yahooapis.com/forecastrss?p=62221');
$xml = new SimpleXMLElement($results);
/* Create the XML for the client */
$response = '<response code="200">';
$response .= '<weather>';
/* Create the prefix context for the XPath query */
$xml->registerXPathNamespace('y', 'http://xml.weather.yahoo.com/ns/rss/1.0');
/* Gather the temperature data */
$temp = $xml->xpath('//y:condition');
/* Fill in information for the client */
$response .= '<temp>'.$temp[0]['text'].', '.$temp[0]['temp'].' &#176;F</temp>';
$response .= '<img>'.$xml->channel->image->url.'</img>';
$response .= '<link>'.$xml->channel->image->link.'</link>';
$response .= '</weather>';
$response .= '</response>';
/* Change the header to text/xml so that the client can use the return string as XML*/
header('Content-Type: text/xml');
/* Give the client the XML */
print($response); ?>

21

Validarea alimentatorului
Serviciile de validare a alimentatorilor sunt disponibile pentru a verifica
validitatea unui alimentator pentru a fi sigur ca aplicatia va lucra cu
acesta
Periodic verifica validitatea alimentatorului pentru a asigura ca serviciul
de agregare lucreaza
Sau scrie o aplicatie care realizeaza validarea alimentatorului in mod
automat
Exista un numar de validatori dintre care se poate alege:

1.

2.
3.

Feed Validator (http://feedvalidator.org/) functioneaza atat pentru RSS cat si


Atom
W3C Validator (http://validator.w3.org/feed/) lucreaza in aceeasi maniera ca
validatorii W3C HTML/XHTML si CSS
Redland RSS 1.0 Validator (http://librdf.org/rss/). Valideaza si formateaza
rezultatul pentru afisare.
Experimental Online RSS 1.0 Validator
(http://www.ldodds.com/rss_validator/1.0/validator.html) utilizeaza o schema
Schematron pentru validare RSS 1.0.
RSS Validator (http://rss.scripting.com/) testeaza validitatea RSS feeds.
22

Mashup-uri & WS

Un mashup este ceea se obtine prin combinara


WSurilor
Rezultatul este o aplicatie Web 2.0 care este
mai sofisticata decat partile sale si ofera
functionalitate care nu a existat anterior
Prin combinarea WSurilor in mashupuri, se
asigura un ajutor pentru aplicatiile Web pentru a
oferi o aparitie dinamica

23

Mashup

= site Web sau aplicatie care combina doua sau mai multe surse
de informare intr-o noua aplicatie Web
Este o aplicatie Web hibrida in care parti ale aplicatiei provin din
interfete publice precum alimentatori web, scraping, si servicii
Web.
Termenul a devenit prima data popular in industria muzicii, cand
DJ din intreaga lume au inceput sa combine parti de inregsitrari
existente de muzica (cateodata de genuri diferite) pentru a crea
noi inregistrari
Prima aplicatie web publica notabila care a utilizat doua APIuri
diferite a fost lansata in Aprilie 2005: HousingMaps.com.
Prin utilizarea JavaScript de la Google folosit pentru harti si
combinarea acestuia cu site-ul calsic Craigslist, autorul a creat un
site care permite utilizatorilor sa vizualizeze cautarea de case in
majoritatea oraselor din SUA
Nu mukt dupa aceea, Google si alte motoare da cautare au
eliberat public APIurile pentru resurse lor care permite
dezvoltatorilor comunitatii web sa raspunda cu sute de mashupuri.
24

Sursa datelor exemple pentru date publice

Inregistrari precum demografie, decese etc.


Numeroase asemenea informatii sunt contrac cost, desi
anumite agentii guvernamentale incep sa permita accesul la
anumite informatii pe gratis
Ideea ca este public poate excita mai multi dezvoltatori inainte
ca sa realizeze cu datele sunt contra cost
Exista o distinctie clara intre public si gratisnu sunt acelasi
lucru
Exemple de date disponibile public:
Inregistrari publice
Inregistrari de verificare
Inregistrari de afaceri
Cautari de persoane

25

Inregistrari publice & Inergistrari de verificare

Date publice

Exemple: inregistrari nasteri, decese, casatorii, divorturi,


faliment,
Aceste date pot fi accesate online, dar contra unei sume
Exista siteuri care permit utilizatorului sa caute date si sa
plateasca o taxa pentru a ajunge la informatii.
Exemple:
People Finders (http://www.peoplefinders.com/)
Public Record Finder (http://www.publicrecordfinder.com/)

Date de verificare

Tipic persoanele care fac verificari daca de exemplu vor sa


afle daca o anumita persoana are dosar penal
Costa mai mult accesul pentru ca este mai dificil de obtinut
26

Inregistrari de afaceri & cautari de persoane

Inregistrari de afaceri.

Date despre business (mari sau mici) sunt disponibile public.


Exemple de informatii despre o afacere: nume, proprietar,
adresa, stat, tip de taxe, informatie de completat, licente
profesionale etc

Cautare de persoane.

Stranse si mentinute de corporatii pentru scopuri de marketing


Majoritatea cautarilor de nume sau numere de telefon sunt
realizate pe baza acestor surse
Informatiile care sunt oferite:

Nume
Varsta/data nasterii
Adresa
Numar de telefon
Identificator personal (ex. CNP, numar de asigurare sociala)

Exemplu: carti de telefon online


27

Servicii open-source

Usual permit obtinerea de date care nu pot fi gasite


in alta parte pe Web, sau date care sunt disponibile
car nu sunt accesibile printr-un API.
Gasirea acestor servicii poate fi realizata pe baza
siteruilor webe care sunt dedicate pentru listarea
serviciilor Web disponibile
Lista din 2008:

Web Service List (http://www.webservicelist.com/)


WebserviceX.NET
(http://www.webservicex.net/WS/default.aspx)
Programmable Web (http://www.programmableweb.com/)
Webmashup.com (http://www.webmashup.com/)
28

Portlet pentru aplicatii

Portlet-urile sunt componente care sunt usor de


introdus si agregat intr-o pagina
O aplicatie care este compuas din trei sau mai
multe servicii Web si prortleturi care nu
intercationeaza intre ele trebuie considerata un
mashup.
Portleturile individuale includ un mashup care
este un portal de informare Web

29

Construirea unui Mashup


1.

2.

3.

Alegerea unui subiect.


precum combinarea de harti, date reale, fotografii, capabilitati de
cautare
decide care tip de WS este necesar
Selecteaza sursa datelor.
Exemplu: utilizarea datelor legate de harti care le ofera Google, si
utilizarea APIului propriu al utilizatorului.
Decide supra mediului de lucru si limbajului.
Prima decizie sete a limbajului care se doreste utilizat

Un factor important este tipul de transport utilizat

4.

No conteaza ce se utilizeaza, PHP, C# .NET, Perl, sau Java, importanta


este stapanirea limbajului.
Cateodata APIul utilizat lucreaza numai pentru anumit limbaj
Trebuie asigurata crearea conexiunilor la API si tratarea datelor care
sosesc ca raspuns, indiferent ce este utilizat SOAP, REST, sau XML-RPC.

Codare.
30

S-ar putea să vă placă și