servicii web de tip rest - andrei.clubcisco.ro

19
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.

Upload: others

Post on 24-Oct-2021

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Servicii Web de tip REST - andrei.clubcisco.ro

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.

Page 2: Servicii Web de tip REST - andrei.clubcisco.ro

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

Page 3: Servicii Web de tip REST - andrei.clubcisco.ro

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":

Page 4: Servicii Web de tip REST - andrei.clubcisco.ro

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.

Page 5: Servicii Web de tip REST - andrei.clubcisco.ro

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:

Page 6: Servicii Web de tip REST - andrei.clubcisco.ro

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.

Page 7: Servicii Web de tip REST - andrei.clubcisco.ro

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.

Page 8: Servicii Web de tip REST - andrei.clubcisco.ro

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:

Page 9: Servicii Web de tip REST - andrei.clubcisco.ro

Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010

9

Se extrag resursele:

Se stabilesc metodele:

Page 10: Servicii Web de tip REST - andrei.clubcisco.ro

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”.

Page 11: Servicii Web de tip REST - andrei.clubcisco.ro

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.

Page 12: Servicii Web de tip REST - andrei.clubcisco.ro

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:

Page 13: Servicii Web de tip REST - andrei.clubcisco.ro

Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010

13

Page 14: Servicii Web de tip REST - andrei.clubcisco.ro

Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010

14

Se adaugă la proiect un serviciu Web de tip REST:

Page 15: Servicii Web de tip REST - andrei.clubcisco.ro

Dezvoltarea Aplicaţiilor Internet Laborator 9 – 2010

15

Se alege resursă simplă:

Page 16: Servicii Web de tip REST - andrei.clubcisco.ro

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:

Page 17: Servicii Web de tip REST - andrei.clubcisco.ro

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":

Page 18: Servicii Web de tip REST - andrei.clubcisco.ro

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.

Page 19: Servicii Web de tip REST - andrei.clubcisco.ro

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