Transferencia de Estado Representacional (Representational State Transfer) o REST
Originado en el año 2000 por el doctor Roy Fielding en la Universidad de California en su tesis doctoral
Tesis “Estilos de Arquitectura y el Diseño de Arquitecturas de Software basadas en Redes”
Principios arquitectónicos de software para usar a la Web como una plataforma de Procesamiento Distribuido
1. Servicios
Web
RestFul
Diego
Armando
Gómez
M.
dgomez@vortexbird.com
Sun
Cer:fied
Java
Associated.
Sun
Cer:fied
Java
Programmer.
Sun
Cer:fied
Web
Component
Developer.
Sun
Cer:fied
Business
Component
Developer
5
Derechos
reservados
2014
2. Que
es
un
WebService?
S Un
WebService
es
una
pieza
de
soLware
iden:ficada
por
un
URI
(Uniform
Resource
Iden:fier).
S Su
medio
de
comunicación
se
fundamenta
en
el
uso
de
XML,
TEXT,
JSON
S XML
S XML
Namespace,
XML
Schema,
Xpath,
XSLT.
S HTTP,
JSON
4. Tradicional
C/S
vs.
Servicios
Web
Traditional C/S
"
"
Within enterprise
Tied to a set of
programming languages
" Procedural
" Usually bound to a
particular transport
" Tightly-coupled
" Efficient processing
(space/time)
Web Service
" Between enterprises
" Program language
independent
" Message-driven
" Easily bound to different
transports
" Loosely-coupled
" Relatively not efficient
processing
5. Web
Applica:on
vs.
Web
Services
Web Application
" User-to-program
interaction
" Static integration of
components
" Monolithic service
Web Service
" Program-to-program
interaction
" Possibility of dynamic
integration of
components (in the
future)
" Possibility of service
aggregation (in the
future)
7. Historia
S Transferencia
de
Estado
Representacional
(Representa:onal
State
Transfer)
o
REST
S Originado
en
el
año
2000
por
el
doctor
Roy
Fielding
en
la
Universidad
de
California
en
su
tesis
doctoral
S Tesis
“Es:los
de
Arquitectura
y
el
Diseño
de
Arquitecturas
de
SoLware
basadas
en
Redes”
S Principios
arquitectónicos
de
soLware
para
usar
a
la
Web
como
una
plataforma
de
Procesamiento
Distribuido
8. Historia
S U:liza
XML
y
HTTP,
sin
las
abstracciones
adicionales
de
los
protocolos
basados
en
patrones
de
intercambio
de
mensajes
como
el
protocolo
de
servicios
web
SOAP.
S Se
hizo
popular
muchos
años
después
con
la
creación
de
varios
framework
que
hacen
fácil
el
desarrollo
de
servicios
RestFul
9. Historia
S Muchas
empresas
con
amplios
servicios
en
internet
están
migrando
sus
servicios
a
Rest.
S
S
S
S
Amazon
Facebook
Yahoo
Twiter
10. Los
4
principios
de
Rest
S U:liza
los
métodos
HTTP
de
manera
explícita
S No
man:ene
estado
S Expone
URIs
con
forma
de
directorios
S Transfiere
XML,
JavaScript
Object
Nota:on
(JSON),
o
ambos
11. Uso
de
métodos
HTTP
de
manera
explícita
S RestFul
usa
de
forma
explicita
los
métodos
HTTP
para
ejecutar
acciones
de
CRUD
Verbo
REST
Acción
POST
Create
GET
Read
PUT
Update
DELETE
Delete
12. No
man:ene
estado
S Basado
en
el
protocolo
HTTP
sin
estado.
S Servicios
mas
simples
de
diseñar,
escribir
y
reu:lizar.
S El
manejo
de
los
estados
debe
ser
hecho
por
el
cliente
de
los
servicios.
13. Expone
URIs
con
forma
de
directorios
S Las
URI
de
los
servicios
Rest
deben
ser
intui:vas.
S Se
deben
poder
deducir
de
forma
fácil.
S Las
URI
se
definen
como
una
estructura
de
carpetas
o
directorios.
14. Expone
URIs
con
forma
de
directorios
S Direcciones
de
un
blog
– hip://www.vortexbird.org/discusion/temas/{tema}
– hip://www.vortexbird.org/discusion/{año}/{mes}/{dia}/{tema}
– hip://www.vortexbird.org/discusion/2008/12/23/javaEE
15. Expone
URIs
con
forma
de
directorios
S Buenas
prac:cas
para
crear
URIs
para
servicios
Rest
S Ocultar
la
tecnología
usada
en
el
servidor
que
aparecería
como
S
S
S
S
S
extensión
de
archivos
(.jsp,
.php,
.asp),
de
manera
de
poder
portar
la
solución
a
otra
tecnología
sin
cambiar
las
URI.
Mantener
todo
el
uri
en
minúsculas.
Sus:tuir
los
espacios
con
guiones
o
guiones
bajos
(uno
u
otro).
Evitar
el
uso
de
strings
de
consulta.
En
vez
de
usar
un
404
Not
Found
si
la
pe:ción
es
una
URI
parcial,
devolver
una
página
o
un
recurso
predeterminado
como
respuesta.
URI
está:co
deforma
que
los
usuarios
puedan
crear
favoritos"
o
bookmarks.
18. Transfiere
XML,
JSON
o
ambos
S Tipos
MIME
más
usados
para
los
servicios
web
REST
son:
MIME-‐Type
Content-‐Type
JSON
applica:on/json
XML
applica:on/xml
XHTML
applica:on/xhtml+xml
TEXT
text/plain
20. Web
Applica:on
Descrip:on
Language
(WADL)
S Formato
XML
usado
para
la
descripción
de
aplicaciones
Web
basadas
en
HTTP.
S El
propósito
de
WADL
es
describir
los
servicios
Rest
o
cualquier
si:o
web.
S Cumple
un
papel
similar
a
WSDL
para
servicios
SOAP.
S Estándar
administrado
por
W3C.
23. JAX-‐RS
S Especificación
para
desarrollo
de
servicios
Rest
en
la
plataforma
JavaEE
S Versión
actual
JAX-‐RS
1.1
S JSR
311
S Integrada
a
JavaEE6
S Anotaciones
para
exposición
de
servicios.
S Es
el
equivalente
de
JAX-‐WS
para
SOAP
25. JAX-‐RS
S Basados
en
el
concepto
de
POJO
(Plain
Old
Java
Object)
S Clases
sin
extends
ni
implements
(Mar:n
Fowler)
S Término
heredado
de
C/C++:
Plain
Old
Data
(POD)
S Tiene
sen:do,
son
clases
de
datos
26. Anotaciones
JAX-‐RS
Anotación
Descripción
@GET
Marca
el
método
como
accesible
a
través
del
método
GET
de
HTTP
@POST
Marca
el
método
como
accesible
a
través
del
método
POST
de
HTTP
@PUT
Marca
el
método
como
accesible
a
través
del
método
PUT
de
HTTP
@DELETE
Marca
el
método
como
accesible
a
través
del
método
DELETE
de
HTTP
@HEAD
Marca
el
método
como
accesible
a
través
del
método
HEAD
de
HTTP
27. Anotaciones
JAX-‐RS
Anotación
Descripción
@Path
Indica
donde
queda
alojada
la
clase
o
el
método.
Por
ejemplo
/holaMundo/
@PathParam
Se
usa
para
asignar
a
los
parámetros
de
los
métodos
el
nombre
del
path
usado.
@Consumes
Se
usa
para
iden:ficar
el
:po
de
mime
que
consume
el
método
u
operación
del
servicios.
Ejemplos
"applica:on/
xml",
"applica:on/json"
@Produces
Se
usa
para
iden:ficar
el
:po
de
mime
que
produce
el
método
u
operación
del
servicios.
Ejemplos
"applica:on/
xml",
"applica:on/json“
@Provider
Se
usa
para
crear
una
clase
especializada
que
representan
en:ty
body.
Estas
clases
implementan
MessageBodyReader
or
MessageBodyWrite
28. Tipos
de
datos
soportados
Tipo
de
dato
Java
Mime
Type
byte[]
All
media
types
(*/*)
ava.lang.String
All
text
media
types
(text/*)
java.io.InputStream
All
media
types
(*/*)
java.io.Reader
All
media
types
(*/*)
java.io.File
All
media
types
(*/*)
javax.ac:va:on.DataSource
All
media
types
(*/*)
javax.xml.transform.Source
XML
media
types
(text/xml,
applica:on/xml,
and
applica:on/*+xml)
javax.xml.bind.JAXBElement
and
applica:on-‐
supplied
JAXB
classes
XML
media
types
(text/xml,
applica:on/xml,
and
applica:on/*+xml)
Mul:valuedMap<String,
String>
Form
content
(applica:on/x-‐www-‐form-‐
urlencoded)
StreamingOutput
All
media
types
(*/*),
MessageBodyWriter
only
29. Código
de
ejemplo
hip://127.0.0.1:8080/demoRest/services/operacionesMatema:cas/sumar/52/6
package
com.vortexbir.rest.services;
import
javax.ws.rs.Consumes;
import
javax.ws.rs.GET;
import
javax.ws.rs.Path;
import
javax.ws.rs.PathParam;
import
javax.ws.rs.Produces;
@Consumes({"applica:on/xml",
"applica:on/json","text/plain"})
@Produces({"applica:on/xml",
"applica:on/json","text/plain"})
@Path("operacionesMatema:cas")
public
class
OperacionesMatemaLcas
{
@GET
@Path("sumar/{numero_uno}/{numero_dos}")
public
String
sumar(@PathParam("numero_uno")Integer
n1,@PathParam("numero_dos")Integer
n2){
int
res=n1+n2;
return
""+res;
}
}
32. Taller
desarrollo
de
servicios
Rest
S Servicio
Operaciones
Matemá:cas
S Sumar
S Restar
S Mul:plicar
S Dividir
S Cliente
del
servicio
33. Taller
desarrollo
de
servicios
Rest
S Servicio
Cliente
S Crear
S Modificar
S Borrar
S Consultar
por
ID
S Consultar
Todos
S Cliente
del
servicio