Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
1
Servicii Web de tip REST
Un serviciu REST (Representational State Transfer) foloseşte un model arhitectural care specifică o
serie de constrângeri (ca de exemplu interfaţa uniformă), care aplicate unui serviciu web induc o serie
de proprietăţi utile (performanţă, scalabilitate). În contextul REST datele şi funcţionalităţile sunt
considerate resurse, accesibile prin URI (Uniform Resource Identifiers) în stilul web. Asupra
resurselor se acţionează prin intermediul unui set de operaţii simple, bine definite. Modelul arhitectural
REST se bazează pe paradigma client-server şi foloseşte un protocol de comunicaţie fără stare
(stateless), de obicei HTTP. Clienţii şi serverele schimbă reprezentări ale resurselor folosind interfeţe
şi protocoale standardizate. În felul acesta aplicaţiile REST snut simple şi performante. Serviciile web
RESTful de obicei asociază cele 4 metode HTTP uzuale cu operaţiile pe care le realizează: create,
retrieve, update, and delete.
Sunt permise următoarele adnotări:
@Path: URI relativ, indică localizarea clasei Java (URI la care e accesibilă resursa).
@GET: specifică faptul că o anumită metodă va trata cereri HTTP de tip GET.
@POST: specifică faptul că o anumită metodă va trata cereri HTTP de tip POST
@PUT: specifică faptul că o anumită metodă va trata cereri HTTP de tip PUT.
@DELETE: specifică faptul că o anumită metodă va trata cereri HTTP de tip @DELETE.
@HEAD: specifică faptul că o anumită metodă va trata cereri HTTP de tip HEAD.
@PathParam: specifică un parametru extras din URI.
@QueryParam: specifică un parametru extras din query parameters din URI.
@Consumes: precizează tipul MIME al reprezentării ce poate fi consumată de o resursă (acceptată de la
client); poate apărea la nivel de clasă sau de metodă.
@Produces: precizează tipul MIME al reprezentării ce va fi produs de resursă şi trimis către client;
poate apărea la nivel de clasă sau de metodă.
@Provider: permite alte asocieri între cererea sau răspunsul HTTP şi JAX-RS.
1. Servicii Web REST realizate cu Apache CXF
1.1. Operaţii pregătitoare
Se descarcă arhiva apache-cxf-2.3.0.zip de la adresa http://cxf.apache.org/ şi se desface (de exemplu) în
directorul “c:\DAI\apache-cxf-2.3.0\”, care va fi setat apoi ca valoare a variabilei de mediu
CXF_HOME. Alternativ se poate descărca şi o versiune anterioară a CXF.
Se descarcă kitul aplicaţiei soapUI-x32-3_6_1.exe de la adresa http://www.soapui.org/ şi se lansează în
execuţie, pentru a instala utilitarul SoapUI. În mod implicit instalarea se face în directorul “C:\Program
Files\eviware”.
Se poate descarca si documentatia SoapUI aferenta, disponibila la adresa
http://sourceforge.net/projects/soapui/files/soapui/ în arhiva (cea mai recentă) soapui-docs-3.5.1.zip.
Se descarcă arhiva apache-ant-1.8.1-bin.zip de la adresa http://ant.apache.org/. Se poate folosi şi o
versiune anterioară. Se expandează aceasta arhivă într-un director, de exemplu în “c:\DAI\apache-ant-
1.8.1\”, care va fi setat apoi ca valoare a variabilei de mediu ANT_HOME.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
2
1.2. Utilizarea unor exemple cu Apache CXF
Subdirectorul “samples” din directorul CXF_HOME conţine mai multe exemple şi un fişier
README.txt cu instrucţiuni de operare pentru folosirea acestor exemple.
În general se folosesc doua ferestre shell pentru introducere comenzi (una pentru pornire server şi una
pentru lansare client) şi, în fiecare din ele, trebuie executate in prealabil urmatoarele comenzi, adaptate
corespunzător:
set CXF_HOME=C:\cxf
set ANT_HOME=C:\ant
set PATH=%PATH%;%ANT_HOME%\bin;%CXF_HOME%\bin
set CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes
Pentru a nu repeta introducerea primelor trei comenzi in fiecare fereastra se pot introduce aceste
comenzi in fisierul de tip AUTOEXEC.BAT (%SystemRoot%\system32\AUTOEXEC.NT) care e
folosit implicit pentru initializarea mediulului de executie pentru ferestrele de tip linie de comanda
(interpretor de comenzi) sau se introduc sau se modifica variabile “Environment Variables”
(MyComputer -> Properties -> Advanced -> Environment Variables).
Pentru a folosi exemplul din directorul “c:\cxf\samples\jax_rs\basic” se procedeaza astfel:
Se deschide o fereastra linie de comandă, se navighează în directorul aplicaţiei (unde se afla fişierul
“build.xml”) şi se porneşte server-ul pentru acest serviciu:
ant server
Se deschide o fereastra linie de comandă, se navighează în directorul aplicaţiei (unde se afla fişierul
“build.xml”) şi se lanseaza un client al acestui serviciu:
ant client
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
3
E posibil să se producă o eroare cauzată de lipsa unei arhive jar (commons-codec-1.4.jar):
Se copiază arhiva "commons-codec-1.4.jar" în directorul "lib-samples":
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
4
Exemplul anterior rulează acum fără erori:
Este bine ca cele 2 ferestre sa fie vizibile simultan pe ecran. Se urmareste ce se afişează în fiecare din
ferestre si apoi se opreste serverul cu Ctrl-C.
Serverul se opreste singur dupa un timp (5 minute):
Acest interval de timp se poate modifica in fisierul “Server.java”, la instructiunea:
O descriere a apelurilor posibile se găseşte în fişierul Readme.txt.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
5
O cerere GET la URL-ul http://localhost:9000/customerservice/customers/123 returnează instanţa
clientului de ID 123:
O cerere GET laURL-ul http://localhost:9000/customerservice/orders/223/products/323 returnează
produsul 323 care aparţine comenzii 223:
O cerere POST la URL-ul http://localhost:9000/customerservice/customers va putea adăuga un client
nou sau poate modifica un client existent. Datele despre client sunt specificate într-o structură XML de
tipul:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
6
Atenţie: accesarea direct în navigator (GET) va genera o eroare:
Deschideţi proiectul folosind NetBeans.
Analizaţi fişierele din pachetul server.
Identificaţi modul în care se iniţializează datele folosite în exemplu.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
7
Observaţi cum se prezintă metodele disponibile în secţiunea REST.
Modificaţi resursa "Customer" prin adăugarea unei proprietăţi noi, vârsta,
Modificaţi clientul astfel încât să se apeleze şi metoda delete.
Analizaţi similar şi alte exemple:
“jax_rs\content_negotiation”
“restful_dispatch”
"restful_http_binding"
1.3. Utilizare SoapUI
SoapUI este un utilitar care permite accesarea si testarea serviciilor Web. El simuleaza un client de
serviciu Web pe baza fisierului WSDL care descrie acel serviciu. Simularea consta in generarea de
cereri catre serviciul Web si afisarea raspunsului primit de la serviciu. Atat cererea, cat si raspunsul,
sunt prezentate in format XML, cererea fiind editabila. Inainte de crearea unui proiect SoapUI trebuie
pornit serverul care ofera serviciul pentru care se genereaza si se trimit cereri de catre SoapUI.
Se lanseaza aplicatia SoapUI folosind imaginea plasata pe desktop sau din meniu cu Start-
>Programs->…
Se porneste serverul CXF pentru aplicatie.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
8
Se va crea un nou proiect cu Ctrl-N sau prin click dreapta pe “Projects”:
Se alege un nume pentru proiect şi se indică faptul că serviciul este REST:
Se adaugă un serviciu nou:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
9
Se extrag resursele:
Se stabilesc metodele:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
10
Se rulează cererea:
2. Servicii Web REST realizate cu GlassFish Jersey şi NetBeans
GlassFish Jersey este implementarea Sun a JAX-RS, inclusă în NetBeans începând cu versiunea 6.5 a
NetBeans.
2.1. Operaţii pregătitoare
Se descarcă arhiva apache-maven-3.0.1-bin.zip de la adresa http://maven.apache.org/download.html şi
se desface in directorul “C:\apache-maven-3.0.1”, care va fi setat ca valoare a variabilei de mediu
MAVEN_HOME.
Se adauga la variabila de mediu PATH urmatoarea cale: “%MAVEN_HOME%\bin”.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
11
Se configurează NetBeans pentru a lucra cu această distribuţie.
Se descarcă exemplele Jersey de la adresa
http://download.java.net/maven/2/com/sun/jersey/samples/jersey-samples/1.0/jersey-samples-1.0-
project.zip.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
12
2.2. Creare aplicaţie simplă
Se deschide NetBeans şi se crează o aplicaţie Web simplă, paşii find descrişi vizual:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
13
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
14
Se adaugă la proiect un serviciu Web de tip REST:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
15
Se alege resursă simplă:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
16
Sistemul cere validarea resurselor REST în aplicaţie.
Sistemul va crea resursa cerută:
Se editează metoda GET:
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
17
Se face deploy la aplicaţie:
Se permite acordarea unor drepturi mai puternice:
Se testează aplicaţia, alegând cele 2 metode disponibile şi apăsând butonul "Test".
Pentru metoda "GET":
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
18
Pentru metoda "POST":
2.3. Utilizarea unor exemple NetBeans
Se deschide aplicaţia "REST: Hello World":
Analizaţi detaliile de implementare.
2.4. Utilizarea unor exemple cu GlassFish Jersey
GlassFish Jersey ("jersey-archive-1.4.zip") se poate descărca şi independent, de la adresa
http://jersey.java.net/ dacă nu se doreşte folosirea instanţei care se instalează odată cu NetBeans.
Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010
19
Se obţine de la adresa http://wikis.sun.com/display/Jersey/Main arhiva "jersey-samples-1.0.3-
project.zip" cu exemple.
Sa se verifice alte 2 exemple din Jersey.
Urmăriţi detaliile din fişierele Readme în sursele propriu-zise.
3. Resurse
Resurse utile:
http://cxf.apache.org/
http://cxf.apache.org/docs/index.html
http://maven.apache.org/download.html
http://jersey.java.net/
https://jsr311.dev.java.net/
https://jsr311.dev.java.net/nonav/javadoc/index.html
http://jcp.org/en/jsr/detail?id=311
http://www.soapui.org/
http://www.soapui.org/IDE-Plugins/installation.html
http://sourceforge.net/projects/soapui/files/
http://jax-ws.java.net/
http://netbeans.org/kb/docs/websvc/jax-ws.html