diseÑo de aplicaciones web bloque3: parte servidora...

38
Bloque3: Parte servidora (backend) DISEÑO DE APLICACIONES WEB Jesús Montes jmontes@fi.upm.es TEMA 3.5: SERVICIOS REST CON SPRING

Upload: vocong

Post on 21-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

Bloque3: Parte servidora (backend)

DISEÑODEAPLICACIONESWEB

Jesú[email protected]

TEMA3.5:SERVICIOSRESTCONSPRING

Page 2: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

Disclaimer

• Estematerialestábasadoenunmaterialoriginalde:§  BoniGarcía([email protected])

SERVICIOSRESTCONSPRING

2

Page 3: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

Índice de contenidos

1.  Introducción2.  ServiciosREST3.  ClientesdeserviciosREST

SERVICIOSRESTCONSPRING

3

Page 4: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

Índice de contenidos

1.  Introducción§  Serviciosweb

§  JSON2.  ServiciosREST3.  ClientesdeserviciosREST

SERVICIOSRESTCONSPRING

4

Page 5: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

1. Introducción

Serviciosweb•  Unserviciodistribuidoconsisteenvariosprocesosqueseejecutanendiferentesequiposterminalesyquesecomunicanatravésdeunareddedatos(típicamenteInternet).

•  LosservicioswebsonuntipodeserviciosdistribuidoaccedidoporHTTPyenelquelosclientespuedeserheterogéneos.§  Podemosverunserviciowebcomounaaplicaciónwebenlaquehayun

clientequehacepeticionesyunservidorquelasatiende.

§  SeutilizaelprotocoloHTTPparalainteracciónentreelclienteyelservidor.

§  Cuandosehaceunapetición,noseesperaobtenerunapáginawebenformatoHTML,envezdeeso,seesperaobtenerdatosestructurados(enformatoXMLoJSON)paraqueseaprocesadaporelcliente.

SERVICIOSRESTCONSPRING

5

Page 6: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

1. Introducción

Serviciosweb•  Algunosdeejemplosdeclientesdeserviciosweb:

§  PáginaswebconAJAXoSPA(SinglePageApplication).

§  Otrotipodeclientes:Aplicaciónmóviles,TVs,consolas,...

§  Servidoresdeotrasaplicacionesweb.

•  Porejemplo,laaplicacióndeFacebookparaAndroidesunclientedeunserviciowebproporcionadoporFacebook.

•  Unadelasmayoresventajasdelosservicioswebeslatransparenciadellenguaje,tantoelclientecomoelservidorpuedenestarescritosencualquierlenguajedeprogramación(notienenqueutilizarelmismolenguaje).

•  Haydostiposprincipalesdeserviciosweb:SOAPyREST.

SERVICIOSRESTCONSPRING

6

Page 7: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

1. Introducción

Serviciosweb

•  REST(REpresentationalStateTransfer)esuntipodeserviciowebquehaceusodelprotocoloHTTPpararealizaroperacionesCRUDenrecursosremotos.§  Seusanlosmétodos(verbos)GET,POST,PUT,DELETEdeHTTP1.1(RFC2616)para

definirlasoperaciones.

§  HayunaextensiónaHTTP1.1(RFC5789)quedefineunnuevométodo:PATCH(modificaciónparcialdeunrecurso).

§  SeusanloscódigosderepuestaHTTP(200OK,500InternalServerError,…)comoresultadodelasoperaciones.

•  Eltérminoseacuñóenelaño2000,enlatesisdoctoralescritaporRoyFielding,unodelosautoresdelaespecificacióndelprotocoloHTTP.§  AlosservicioswebquesiguenlaarquitecturaRESTselessueleconocercomoRESTful.

§  SinoseusalaarquitecturaRESTdeformaestricta(porejemplo,sólousandoGETyPOSTparatodaslasoperaciones)sedicequeelservicioesREST-like.

SERVICIOSRESTCONSPRING

7

Page 8: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

1. Introducción

JSON•  JSON(JavaScriptObjectNotation),esunformatoligeroparaalmacenaroenviarinformaciónestructurada.

•  Noesrealmenteunestándarcomotal,peroestábasadoenelestándardeJavaScript(ECMAScript).

•  SeutilizaparalacodificacióndelainformaciónenlamayoríadelosserviciosREST(aunquetambiénsepuedeusarXML).

•  JSONseestáhaciendocadavezmáspopular(cadavezseempleamásenlugaresdondeantesseempleabaXML):§  Ficherosdeconfiguración,informaciónestructurada,etc…

SERVICIOSRESTCONSPRING

8

http://www.json.org/

Page 9: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

1. Introducción

JSON•  EjemplodeinformaciónestructuradaconJSON:

SERVICIOSRESTCONSPRING

9

{ "menu": { "id": "file", "value": "File", "popup": { "menuitem": [ { "value": "New", "onclick": "CreateNewDoc()" }, { "value": "Open", "onclick": "OpenDoc()" }, { "value": "Close", "onclick": "CloseDoc()" } ] } } }

Page 10: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

1. Introducción

JSON•  ExistenmultituddebibliotecasencualquierlenguajeparaprocesarJSON.

•  LasprincipalesbibliotecasdeJSONparaJavason:

•  Jackson:§  http://jackson.codehaus.org/

§  EslabibliotecapordefectoenSpringparaJSON.

•  GSon:§  https://code.google.com/p/google-gson/

§  BibliotecadeJSONdeGoogle.EsmásligeraqueJackson.

SERVICIOSRESTCONSPRING

10

Page 11: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

Índice de contenidos

1.  Introducción2.  ServiciosREST

§  DiseñodeunservicioREST

§  ImplementacióndeunservicioREST3.  ClientesdeserviciosREST

SERVICIOSRESTCONSPRING

11

Page 12: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

DiseñodeunservicioREST•  ElesquemahabitualquedefineelfuncionamientodelosserviciosRESTeselsiguiente:1.  LaidentificaciónderecursosserealizanmedianteURLs.

2.  LasoperacionesserealizanmediantemétodosHTTP.

3.  Lainformaciónsedevuelvecodificadaelcuerpodelarespuesta.

4.  LoscódigosderespuestaHTTPnotificanelresultadodelaoperación.

SERVICIOSRESTCONSPRING

12

Page 13: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

DiseñodeunservicioREST

SERVICIOSRESTCONSPRING

13

URI vs URL vs URN -  URI = Uniform Resource Identifier -  URL = Uniform Resource Locator -  URN = Uniform Resource Name -  Las URIs son cadenas que sirven para identificar un recurso -  Las URLs son cadenas que sirven para localizar un recurso -  Las URNs son cadenas que sirven para nombrar un recurso -  Todas las URLs son URIs pero no siempre ocurre a la inversa

URIs

URLs URNs

-  Ejemplos URLs: -  http://www.ietf.org/rfc/rfc2396.txt -  mailto:[email protected]

-  Ejemplos URNs: -  urn:ietf:rfc:2648 -  urn:issn:0167-6423

http://www.w3.org/TR/uri-clarification/

Page 14: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

DiseñodeunservicioREST1.  LaidentificaciónderecursosserealizanmedianteURLs:•  UnapartedelaURLesfijayotraparteapuntaalrecursoconcreto.

•  Ejemplos:§  http://server.tld/users/bob

§  http://server.tld/users/bob/anuncio/comparto-piso

§  http://server.tld/users/bob/anuncio/44

SERVICIOSRESTCONSPRING

14

Page 15: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

DiseñodeunservicioREST2.  LasoperacionesserealizanmediantemétodosHTTP:

•  GET:Devuelveelrecurso,generalmentecodificadoenJSON.Noenvíaninformaciónenelcuerpodelapetición.

•  DELETE:Borraelrecurso.Noenvíaninformaciónenelcuerpodelapetición.

•  POSTyPUT:Añade/modificaunrecurso.Envíaelrecursoenelcuerpodelapetición.§  LadiferenciaentreunayotraestáquePUTdeberíaserunaoperación

idempotente(aunquesellamevariasvecestieneelmismoefecto)mientrasquePOSTnoloserá.

§  PATCH:Modificaciónparcialdeunrecurso.

SERVICIOSRESTCONSPRING

15

Page 16: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

DiseñodeunservicioREST3.  Lainformaciónsedevuelvecodificadaelcuerpodelarespuesta

•  Petición:§  URL:http://server/bob/bookmarks/6

§  Método:GET

•  Respuesta:§  mime-type:application/json

§  Body:

SERVICIOSRESTCONSPRING

16

{ id: 6, uri: "http://bookmark.com/2/bob", description: "A description" }

Page 17: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

DiseñodeunservicioREST4.  LoscódigosderespuestaHTTPnotificanelresultadodelaoperación:

•  100-199:Noestándefinidos.

•  200-299:Lapeticiónfueprocesadacorrectamente.

•  300-399:Elclientedebehaceraccionesadicionalesparacompletarlapetición,porejemplo,unaredirecciónaotrapágina.

•  400-499:Seusaencasosenlosqueelclienteharealizadolapeticiónincorrectamente(ejemplotípico:404Noexiste).

•  500-599:Seusacuandoseproduceunerrorprocesandolapetición.

SERVICIOSRESTCONSPRING

17

Page 18: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  ParaimplementarlosserviciosRESTconJavasepuedeusar:

•  JAX-RS(JavaAPIforRESTfulWebServices)§  EstándarJavaEE.

§  https://jersey.java.net/

•  SpringMVC§  PartedelFrameworkSpring.

§  Mismosistemausadoparagenerarpáginasweb.

§  DiferenciasconSpringMVCparagenerarHTML:�  Seusalaanotación@RestController(enlugarde@Controller)�  Losmétodosdevuelvenelvalorquetienequeenviarsealcliente,envezde

devolverelobjetoModelAndView

SERVICIOSRESTCONSPRING

18

Page 19: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  EjemplodeservicioRESTconSpringMVC:

§  Gestionaunalistadeequipos(claseTeam).

§  Cadaequipotieneunnombreyunalistadejugadores(clasePlayer).

§  Permiteobtenertodoslosequipos(conlosjugadores).

§  Permiteobtenerunequipoconcretoporsuíndice.

SERVICIOSRESTCONSPRING

19

Page 20: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  EjemplodeservicioRESTconSpringMVC

SERVICIOSRESTCONSPRING

20

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

No necesitamos capa de presentación (Thymeleaf), con lo que usamos la dependencia de aplicaciones web de Spring Boot

Page 21: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  EjemplodeservicioRESTconSpringMVC

SERVICIOSRESTCONSPRING

21

public class Player { private String name; private String nickname; public Player() { } public Player(String name, String nickname) { this.name = name; this.nickname = nickname; } // Getters, setters }

Modelo

public class Team { private List<Player> players; private String name; public Team() { } public Team(String name, List<Player> players) { this.name = name; this.players = players; } // Getters and setters }

Page 22: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  EjemplodeservicioRESTconSpringMVC

SERVICIOSRESTCONSPRING

22

@RestController public class TeamsRestController { @Autowired private TeamsService teamsService; @RequestMapping(value = "/teams", method = RequestMethod.GET) public List<Team> getTeams() { return teamsService.getTeams(); } @RequestMapping(value = "/team/{index}", method = RequestMethod.GET) public Team getTeam(@PathVariable("index") int index) { return teamsService.getTeam(index); } @RequestMapping(value = "/teams", method = RequestMethod.POST) public ResponseEntity<Boolean> addTeam(@RequestBody Team team) { teamsService.addTeam(team); return new ResponseEntity<Boolean>(true, HttpStatus.CREATED); } }

Controlador REST

Para acceder al cuerpo de la petición POST se usa la anotación @RequestBody en lugar de @RequestParam

Page 23: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  EjemplodeservicioRESTconSpringMVC

SERVICIOSRESTCONSPRING

23

@Service public class TeamsService { private List<Team> teams; public TeamsService() { teams = new ArrayList<>(); Player p1 = new Player("Player 1", "p1"); Player p2 = new Player("Player 2", "p2"); Player p3 = new Player("Player 3", "p3"); Player p4 = new Player("Player 4", "p4"); List<Player> l1 = new ArrayList<>(); l1.add(p1); l1.add(p2); Team t1 = new Team("t1", l1); List<Player> l2 = new ArrayList<>(); l2.add(p3); l2.add(p4); Team t2 = new Team("t2", l2); teams.add(t1); teams.add(t2); }

El servicio que implementamos en este ejemplo maneja una lista en memoria (objeto de tipo ArrayList)

public Team getTeam(int index) { return teams.get(index); } public List<Team> getTeams() { return teams; } public void addTeam(Team team) { teams.add(team); } }

Page 24: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

2. Servicios REST

ImplementacióndeunservicioREST•  EjemplodeservicioRESTconSpringMVC

SERVICIOSRESTCONSPRING

24

@SpringBootApplication public class RestServiceApp { public static void main(String[] args) { SpringApplication.run(RestServiceApp.class, args); } }

Como siempre, para ejecutar el ejemplo usamos una aplicación Java Spring Boot

Page 25: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

Índice de contenidos

1.  Introducción2.  ServiciosREST3.  ClientesdeserviciosREST

§  Herramientasinteractivas

§  ClienteJavaconJackson

§  ClienteJavaconSpringRESTTemplate

§  ClienteJavaconRetrofit

§  ClienteJavaScriptconjQuery

SERVICIOSRESTCONSPRING

25

Page 26: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

•  LosserviciosRESTestándiseñadosparaserutilizadosporotrasaplicaciones.

•  Estasaplicacionesestaránimplementadasenalgúnlenguajedeprogramación.

•  EstudiaremosclientesimplementadosenJavayenJavaScript.

•  Comodesarrolladorespodemosusarherramientasinteractivasparahacerpeticionesyverlasrespuestas.

SERVICIOSRESTCONSPRING

26

Page 27: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

Herramientasinteractivas•  ElnavegadorwebesunaherramientabásicaquesepuedeusarparahacerpeticionesGET.

SERVICIOSRESTCONSPRING

27

Page 28: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

Herramientasinteractivas•  ExistenextensionesdelosnavegadoresquenospermitenrealizarcualquiertipodepeticiónREST.

•  Porejemplo,hayextensionesdeChromeespecíficasparaserusadascomoclientesREST:PostmanoRESTConsole.

•  EnChromelasextensionessegestionaenlapáginachrome://extensions/

SERVICIOSRESTCONSPRING

28

Page 29: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

Herramientasinteractivas

SERVICIOSRESTCONSPRING

29

Page 30: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaconJackson•  Elclientesepuedeimplementarconlasclasesbásicasdelabiblioteca

estándardeJavaquepermitenhacerunapeticiónHTTPaunaURL.

•  ParaprocesarlainformaciónJSONenelclienteusaremoslabibliotecaJackson(http://jackson.codehaus.org/).

•  Dependencia:

SERVICIOSRESTCONSPRING

30

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>

Page 31: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaconJackson•  Ejemplo:

SERVICIOSRESTCONSPRING

31

public class JacksonClient { public static void main(String[] args) throws Exception { // Http request URL url = new URL("http://localhost:8080/team/0"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); // Configure Jackson parser ObjectMapper mapper = new ObjectMapper(); // Parse response Team team = mapper.readValue(conn.getInputStream(), Team.class); // Use response System.out.println(team); } }

Page 32: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaconSpringRESTTemplate•  Podemosusarbibliotecasdemásaltonivelpararealizarlaspeticiones

REST.

•  SpringRESTTemplateeslaimplementacióndeSpring.

•  Encapsulaenunaúnicallamadalapeticiónyel“parseo”delarespuesta.

•  EjemploGET:

•  Másinformaciónen:https://spring.io/guides/gs/consuming-rest/

SERVICIOSRESTCONSPRING

32

RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/team/1"; Team team = restTemplate.getForObject(url, Team.class); System.out.println(team);

Page 33: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaconRetrofit•  OtrabibliotecadealtonivelparaimplementarunclienteRESTenJavaesRetrofit.

•  SedefineuninterfazJavaconlosmétodosquereflejanlosserviciosdelaAPI.

•  EstosmétodosseanotanparaespecificardetallesdelaAPIREST.

•  LaaplicaciónclientesólotienequeinvocarestosmétodosparaconsumirelservicioREST.

•  Dependencia:

SERVICIOSRESTCONSPRING

33

<dependency> <groupId>com.squareup.retrofit</groupId> <artifactId>retrofit</artifactId> <version>1.7.1</version> </dependency>

http://square.github.io/retrofit/

Page 34: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaconRetrofit

SERVICIOSRESTCONSPRING

34

public interface TeamsService { @GET("/teams") List<Team> getTeams(); @GET("/team/{index}") Team getTeam(@Path("index") int index); @POST("/teams") boolean addTeam(@Body Team team); }

Interfaz anotado con la descripción del servicio REST

La anotación @Body se usa para indicar que el parámetro va en el cuerpo de la petición (no en la URL)

Page 35: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaconRetrofit

SERVICIOSRESTCONSPRING

35

public static void main(String[] args) throws Exception { // GET RestAdapter adapter = new RestAdapter.Builder().setEndpoint( "http://localhost:8080").build(); TeamsService service = adapter.create(TeamsService.class); Team team = service.getTeam(0); System.out.println(team); // POST List<Player> players = new ArrayList<Player>(); players.add(new Player("M.A.", "Barracus")); players.add(new Player("Murdock", "Crazy")); Team aTeam = new Team("A Team", players); boolean created = service.addTeam(aTeam); System.out.println("Created: " + created); }

Ejemplo de consulta GET y POST

Page 36: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaScriptconjQuery•  LasaplicacioneswebconAJAXoconarquitecturaSPA,implementadasconJavaScript,usanserviciosRESTdesdeelnavegador.

•  AligualqueenJava,existenmuchasformasdeusarserviciosRESTenJavaScriptenelnavegador.

•  UnodelosmecanismosmásusadosesusarlalibreríajQuery.

SERVICIOSRESTCONSPRING

36

Page 37: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaScriptconjQuery

SERVICIOSRESTCONSPRING

37

<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script> $(function() { $.ajax({ url : "http://localhost:8080/team/0" }).then(function(data) { $('.team-name').append(data.name); $('.team-players').append(JSON.stringify(data.players)); }); }); </script> </head> <body> <div> <p class="team-name">Team:</p> <p class="team-players">Players:</p> </div> </body> </html>

Esta función convierte el objeto data.players en un String

Ejemplo GET

Page 38: DISEÑO DE APLICACIONES WEB Bloque3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/daw-tema3.5.pdf · • Una de las mayores ventajas de los servicios

3. Clientes de servicios REST

ClienteJavaScriptconjQuery

SERVICIOSRESTCONSPRING

38

$(function() { var newTeam = { name : "New team name", players : [ { "name" : "Player 1", "nickname" : "Nick 1" }, { "name" : "Player 2", "nickname" : "Nick 2" } ] }; $.ajax({ type : "POST", data : JSON.stringify(newTeam), contentType : "application/json", url : "http://localhost:8080/teams" }).then(function(data) { $('.result').append(data); }); });

Ejemplo POST