DISEÑO DE APLICACIONES WEB
Bloque3: Parte servidora
(backend)
TEMA 3.5: SERVICIOS REST CON SPRING
Jesús Montes
jmontes@fi.upm.es
SERVICIOS REST CON SPRING
Disclaimer
• Este material está basado en un material
original de:
§ Boni García (
[email protected])
2
SERVICIOS REST CON SPRING
Índice de contenidos
1. Introducción
2. Servicios REST
3. Clientes de servicios REST
3
SERVICIOS REST CON SPRING
Índice de contenidos
1. Introducción
§ Servicios web
§ JSON
2. Servicios REST
3. Clientes de servicios REST
4
SERVICIOS REST CON SPRING
1. Introducción
Servicios web
• Un servicio distribuido consiste en varios procesos que se ejecutan
en diferentes equipos terminales y que se comunican a través de una
red de datos (típicamente Internet).
• Los servicios web son un tipo de servicios distribuido accedido por
HTTP y en el que los clientes puede ser heterogéneos.
§ Podemos ver un servicio web como una aplicación web en la que hay un
cliente que hace peticiones y un servidor que las atiende.
§ Se utiliza el protocolo HTTP para la interacción entre el cliente y el
servidor.
§ Cuando se hace una petición, no se espera obtener una página web en
formato HTML, en vez de eso, se espera obtener datos estructurados (en
formato XML o JSON) para que sea procesada por el cliente.
5
SERVICIOS REST CON SPRING
1. Introducción
Servicios web
• Algunos de ejemplos de clientes de servicios web:
§ Páginas web con AJAX o SPA (Single Page Application).
§ Otro tipo de clientes: Aplicación móviles, TVs, consolas,...
§ Servidores de otras aplicaciones web.
un servicio web proporcionado por Facebook.
• Por ejemplo, la aplicación de Facebook para Android es un cliente de
• Una de las mayores ventajas de los servicios web es la transparencia
del lenguaje, tanto el cliente como el servidor pueden estar escritos
en cualquier lenguaje de programación (no tienen que utilizar el
mismo lenguaje).
• Hay dos tipos principales de servicios web: SOAP y REST.
6
SERVICIOS REST CON SPRING
1. Introducción
Servicios web
• REST (REpresentational State Transfer) es un tipo de servicio web que hace
uso del protocolo HTTP para realizar operaciones CRUD en recursos
remotos.
§ Se usan los métodos (verbos) GET, POST, PUT, DELETE de HTTP 1.1 (RFC 2616) para
definir las operaciones.
§ Hay una extensión a HTTP 1.1 (RFC 5789) que define un nuevo método: PATCH
(modificación parcial de un recurso).
§ Se usan los códigos de repuesta HTTP (200 OK, 500 Internal Server Error, …) como
resultado de las operaciones.
• El término se acuñó en el año 2000, en la tesis doctoral escrita por Roy
Fielding, uno de los autores de la especificación del protocolo HTTP.
§ A los servicios web que siguen la arquitectura REST se les suele conocer como RESTful.
§ Si no se usa la arquitectura REST de forma estricta (por ejemplo, sólo usando GET y POST
para todas las operaciones) se dice que el servicio es REST-like.
7
SERVICIOS REST CON SPRING
1. Introducción
almacenar o enviar información estructurada.
JSON
• JSON (JavaScript Object Notation), es un formato ligero para
• No es realmente un estándar como tal, pero está basado en el
• Se utiliza para la codificación de la información en la mayoría de los
estándar de JavaScript (ECMAScript).
servicios REST(aunque también se puede usar XML).
• JSON se está haciendo cada vez más popular (cada vez se emplea
más en lugares donde antes se empleaba XML):
§ Ficheros de configuración, información estructurada, etc…
http://www.json.org/
8
SERVICIOS REST CON SPRING
1. Introducción
JSON
• Ejemplo de información estructurada con JSON:
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
},
{
"value": "Open",
"onclick": "OpenDoc()"
},
{
"value": "Close",
"onclick": "CloseDoc()"
}
]
}
}
}
9
SERVICIOS REST CON SPRING
1. Introducción
JSON
• Existen multitud de bibliotecas en cualquier lenguaje para procesar
• Las principales bibliotecas de JSON para Java son:
• Jackson:
JSON.
§ http://jackson.codehaus.org/
§ Es la biblioteca por defecto en Spring para JSON.
• GSon:
§ https://code.google.com/p/google-gson/
§ Biblioteca de JSON de Google. Es más ligera que Jackson.
10
SERVICIOS REST CON SPRING
Índice de contenidos
1. Introducción
2. Servicios REST
§ Diseño de un servicio REST
§ Implementación de un servicio REST
3. Clientes de servicios REST
11
SERVICIOS REST CON SPRING
2. Servicios REST
Diseño de un servicio REST
• El esquema habitual que define el funcionamiento de los
servicios REST es el siguiente:
1. La identificación de recursos se realizan mediante URLs.
2. Las operaciones se realizan mediante métodos HTTP.
3. La información se devuelve codificada el cuerpo de la respuesta.
4. Los códigos de respuesta HTTP notifican el resultado de la
operación.
12
SERVICIOS REST CON SPRING
2. Servicios REST
Diseño de un servicio REST
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:
- Ejemplos URNs:
- http://www.ietf.org/rfc/rfc2396.txt
- mailto:
[email protected]
- urn:ietf:rfc:2648
- urn:issn:0167-6423
http://www.w3.org/TR/uri-clarification/
13
SERVICIOS REST CON SPRING
2. Servicios REST
Diseño de un servicio REST
1. La identificación de recursos se realizan mediante URLs:
• Una parte de la URL es fija y otra parte apunta al recurso
concreto.
• Ejemplos:
§ http://server.tld/users/bob
§ http://server.tld/users/bob/anuncio/comparto-piso
§ http://server.tld/users/bob/anuncio/44
14
SERVICIOS REST CON SPRING
2. Servicios REST
Diseño de un servicio REST
2. Las operaciones se realizan mediante métodos HTTP:
• GET: Devuelve el recurso, generalmente codificado en JSON. No
envían información en el cuerpo de la petición.
• DELETE: Borra el recurso. No envían información en el cuerpo de la
petición.
• POST y PUT: Añade/modifica un recurso. Envía el recurso en el
cuerpo de la petición.
§ La diferencia entre una y otra está que PUT debería ser una operación
idempotente (aunque se llame varias veces tiene el mismo efecto)
mientras que POST no lo será.
§ PATCH: Modificación parcial de un recurso.
15
SERVICIOS REST CON SPRING
2. Servicios REST
Diseño de un servicio REST
3.
• Petición:
La información se devuelve codificada el cuerpo de la respuesta
§ URL: http://server/bob/bookmarks/6
§ Método: GET
• Respuesta:
§ mime-type: application/json
§ Body:
{
id: 6,
uri: "http://bookmark.com/2/bob",
description: "A description"
}
16
SERVICIOS REST CON SPRING
2. Servicios REST
Los códigos de respuesta HTTP notifican el resultado de la operación:
Diseño de un servicio REST
4.
• 100-199: No están definidos.
• 200-299: La petición fue procesada correctamente.
• 300-399: El cliente debe hacer acciones adicionales para completar la
• 400-499: Se usa en casos en los que el cliente ha realizado la petición
• 500-599: Se usa cuando se produce un error procesando la petición.
petición, por ejemplo, una redirección a otra página.
incorrectamente (ejemplo típico: 404 No existe).
17
SERVICIOS REST CON SPRING
2. Servicios REST
Implementación de un servicio REST
• Para implementar los servicios REST con Java se puede usar:
• JAX-RS (Java API for RESTful Web Services)
§ Estándar Java EE.
§ https://jersey.java.net/
• Spring MVC
§ Parte del Framework Spring.
§ Mismo sistema usado para generar páginas web.
§ Diferencias con Spring MVC para generar HTML:
Se usa la anotación @RestController (en lugar de @Controller)
Los métodos devuelven el valor que tiene que enviarse al cliente, en vez de
devolver el objeto ModelAndView
18
SERVICIOS REST CON SPRING
2. Servicios REST
Implementación de un servicio REST
• Ejemplo de servicio REST con Spring MVC:
§ Gestiona una lista de equipos (clase Team).
§ Cada equipo tiene un nombre y una lista de jugadores (clase Player).
§ Permite obtener todos los equipos (con los jugadores).
§ Permite obtener un equipo concreto por su índice.
19
SERVICIOS REST CON SPRING
2. Servicios REST
Implementación de un servicio REST
• Ejemplo de servicio REST con Spring MVC
<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
20
SERVICIOS REST CON SPRING
2. Servicios REST
Implementación de un servicio REST
• Ejemplo de servicio REST con Spring MVC
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;
Comentarios de: Tema 3.5: Servicios REST con Spring (0)
No hay comentarios