2. Que
es
un
WebService?
S Un
WebService
es
una
pieza
de
so9ware
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
Within enterprise
Tied to a set of
programming languages
Procedural
Usually bound to a
particular transport
Tightly-coupled
Efficient processing
(space/time)
Between enterprises
Program language
independent
Message-driven
Easily bound to different
transports
Loosely-coupled
Relatively not efficient
processing
Traditional C/S Web Service
5. Web
Applica>on
vs.
Web
Services
User-to-program
interaction
Static integration of
components
Monolithic service
Program-to-program
interaction
Possibility of dynamic
integration of
components (in the
future)
Possibility of service
aggregation (in the
future)
Web Application Web Service
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
So9ware
basadas
en
Redes”
S Principios
arquitectónicos
de
so9ware
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 Amazon
S Facebook
S Yahoo
S 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
– hdp://www.vortexbird.org/discusion/temas/{tema}
– hdp://www.vortexbird.org/discusion/{año}/{mes}/{dia}/{tema}
– hdp://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
extensión
de
archivos
(.jsp,
.php,
.asp),
de
manera
de
poder
portar
la
solución
a
otra
tecnología
sin
cambiar
las
URI.
S Mantener
todo
el
uri
en
minúsculas.
S Sus;tuir
los
espacios
con
guiones
o
guiones
bajos
(uno
u
otro).
S Evitar
el
uso
de
strings
de
consulta.
S 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.
S 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
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
OperacionesMatema>cas
{
@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;
}
}
hdp://127.0.0.1:8080/demoRest/services/operacionesMatema;cas/sumar/52/6
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