Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Arquitectura REST
Grupo de Construcción de Sw
1
Referencias
http://www.infoq.com/resource/minibooks/emag-
03-2010-rest/en/pdf/ResteMag.pdf
https://www.ics.uci.edu/~fielding/pubs/dissertatio
n/fielding_dissertation.pdf
http://www.xfront.com/REST-Web-Services.html
http://www.vinaysahni.com/best-practices-for-a-
pragmatic-restful-api#requirements
http://www.restapitutorial.com/
2
Qué es REST?
Roy Fielding acuñó el término REST en su
tesis doctoral en el 200:
REST = Representational State Transfer
REST es un estilo arquitectural
HTTP Rest es una forma de implementarlo
3
5
La web
En los sitios
hay recursos
que son
accedidos
utilizando una
url que los
identifica de
manera única y
aa través del
protocolo HTTP
Request
Response
6
Request
Response
7
Elementos
Lo más importante: recursos
10
Elementos
Lo más importante: recursos
11
Se pueden
localizar de
manera única
Pueden tener
distintas
representaciones
Elementos
Lo más importante: recursos
12
Se pueden
localizar de
manera única
Pueden tener
distintas
representaciones
http://example.com/customers/1234
http://example.com/orders/2007/10/776654
http://example.com/products/4554
Operaciones
Transferir una representación del recurso de
un lado para otro en la red
Modificar un recurso o Crear un recurso
Las operaciones son sin estado (no se sabe
qué pasó antes)
13
Principios de diseño REST
Identificar las entidades conceptuales que se
quieren exhibir como servicios
Crear una URL para cada recurso. Los
recursos son sustantivos NO VERBOS
Ejemplo de una mala definición:
http://www.parts-depot.com/parts/getPart?id=00345
Corrección:
http://www.parts-depot.com/parts/00345
14
Principios de diseño REST
Categorizar los recursos de acuerdo con:
El cliente recibirá una representación del recurso
(HTTP GET)
El cliente modificará o creará el recurso (HTTP
POST, PUT, y/o DELETE).
Todos los recursos que se accedan vía
HTTP GET no deben tener efecto de borde
(solo trae una representación del recurso) .
15
Principios de diseño REST
Los recursos deben encadenar otros
recursos: proveer hyperlinks para obtener
más detalles
16
17
Método URI Acción Parámetros Cuerpo Retorno
GET /booksObtener todos los objetos
JSON de Book (RETRIEVE)
@QueryParam page: página
a consultar
@QueryParam
maxRecords: cantidad de
registros a consultar
Si se omite alguno de estos
parámetros se obtiene todos
los registros en la base de
datos
Colección de objetos
JSON Book y el total
de registros en la
base de datos en el
header X-Total-
Count
GET /books/:id
Obtener los atributos de una
instancia de Book en formato
JSON(RETRIEVE)
@PathParam id:
Identificador del registro
Objeto JSON con
detalle de la
instancia de Book
POST /booksCrear una nueva instancia de la
entidad Book (CREATE)
Objeto
JSON de
Book a
crear
Objeto JSON de
Book creado
PUT /books/:idActualiza una instancia de la
entidad Book (UPDATE)
@PathParam id:
Identificador del registro
Objeto
JSON de
Book
Objeto JSON de
Book actualizado
DELETE /books/:idBorra instancia de Book en el
servidor (DELETE)
@PathParam id:
Identificador del registro
Diseño de un API Rest
Pensar en las entidades principales de la
aplicación como colecciones de recursos.
/products
/customers
/orders
18
Diseño de un API Rest
Sobre una colección se puede traer todos los
elementos de la colección, traer un elemento
particular, agregar un elemento particular,
Borrar un elemento.
Los elementos en las colecciones deben
tener una representación.
19
Nombramiento de los recursos
Los APIs REST se escriben para los clientes
que van a consumir los servicios.
El nombre y la estructura de los URIs deben
transmitir un significado claro y no ambiguo a
esos consumidores.
Diseñar para sus clientes, no para sus datos.
20
Tomado de: http://www.restapitutorial.com/lessons/restfulresourcenaming.html
Nombramiento de los recursos
Requerimientos:
1. Dentro de un conjunto de servicios, cada
recurso debe tener al menos un URI que lo
identifique.
2. El URI debe tener sentido y describir
adecuadamente el recurso.
3. Los URIs debe seguir una estructura predecible,
jerárquica para mejorar el entendimiento y
facilitar su uso.
21
Tomado de: http://www.restapitutorial.com/lessons/restfulresourcenaming.html
Nombramiento de los recursos
5. Deber ser predecible en el sentido de que son
coherentes
6. Debe ser jerárquica en el sentido de que la
estructura de los datos tiene relaciones.
7. Esta no es una regla REST o restricción, pero
mejora la API.
22
Tomado de: http://www.restapitutorial.com/lessons/restfulresourcenaming.html
23
La clase System se utiliza para poder nombrar las colecciones que pueden ser
accedidas de forma directa
URI Significado
/customers La colección de recursos de tipo
Customer.
/customers/33452/ El Customer 33452
/orders La colección de todas las ordenes en
el sistema
/orders/1234 La Orden 1234
/customers/33452/orders La colección de todas las ordenes del
Customer 33452
/orders/1234/items La colección de todos los Item de la
Orden 1234
24
Método Significado
GET /customers Retorna la colección de recursos de tipo Customer.
POST /customers Crea un nuevo Customer
PUT /customers No se usa
DELETE /customers No se usa
GET /customers/33452/ Retorna el Customer 33452
GET|PUT|DELETE /customers/33452/ Crea, actualiza o elimina el Customer 33452
POST /customers/33452/ No se usa
GET /customers/33452/orders La colección de todas las ordenes del Customer 33452
POST /customers/33452/orders Crea una nueva Order para el Customer 33452
GET /customers/33452/orders/1234 Retorna la Order 1234 del Customer 3452
Recursos y representaciones
25
GET /curstomers/:id_customer
Devuelve la
representación del
recurso customer
identificado por el
id_customer
Representación JSON
Recursos y representaciones
26
GET /customers
Devuelve un arreglo de
representaciones del
recurso customer
Recursos y representaciones
27
DELETE /curstomers/:id_customer
Borra el recurso
customer identificado por
el id_customer
Recursos y representaciones
28
POST /curstomers
Parámetro: {“firstName”:“Juan”,
“lastName”: “Perez”,
”age”:30}
Crea un nuevo recurso
customer, con la
información pasada por
parámetro y regresa el id
correspondiente