Está en la página 1de 95

TESTING Y DOCUMENTACIN DE SERVICIOS

REST
@BORILLO

YO
{ n a m e:' R i c a r d oB o r i l l o ' , c o m p a n y:' U n i v e r s i t a tJ a u m eI ' , m a i l:' b o r i l l o @ u j i . e s ' , s o c i a l:{ t w i t t e r:' @ b o r i l l o ' , b l o g:' x m l u t i l s . c o m ' , l i n k e d i n:' l i n k e d i n . c o m / i n / b o r i l l o ' } }

YO

NDICE

HTTP y REST Jersey JAX-RS Testing: Objetivos y alternativas Mejora de la expresividad Documentacin de los servicios

HTTP Y REST

CARACTERSTICAS DE REST:

USO DE LOS VERBOS HTTP

CARACTERSTICAS DE REST:

CUALQUIER FORMATO SOBRE HTTP

CARACTERSTICAS DE REST:

ORIENTADO A RECURSOS
Lista todos los coches o recupera uno:
G E T/ c a r s G E T/ c a r s / 1 2 3 4 A A W

Aade, modifica o elimina un coche:


P O S T/ c a r s P U T/ c a r s / 1 2 3 4 A A W D E L E T E/ c a r s / 1 2 3 4 A A W

LA GRAN VENTAJA DE REST

APROVECHA AL MXIMO LA INSFRASTRUCTURA DE HTTP


Simplicidad, escalabilidad, cacheo, seguridad, ...

Evitar cosas como:


/ g e t U s u a r i o / g e t A l l A s u a r i o s / m o d i f i c a C u e n t a B y I d

REST != RPC

Utilizar nombres que definen recursos:


/ u s u a r i o s / u s u a r i o s / 1 / u s u a r i o s / 1 / f a c t u r a s

JERSEY JAX-RS

QU ES?
Jersey es la implementacin Java de referencia del estndar JAX-RS para la definicin de servicios REST:
h t t p s : / / j e r s e y . d e v . j a v a . n e t /

CONFIGURACIN DE UNA APLICACIN WEB JERSEY


Usando Maven:
< d e p e n d e n c y > < g r o u p I d > c o m . s u n . j e r s e y < / g r o u p I d > < a r t i f a c t I d > j e r s e y s e r v e r < / a r t i f a c t I d > < v e r s i o n > 1 . 1 7 . 1 < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > c o m . s u n . j e r s e y < / g r o u p I d > < a r t i f a c t I d > j e r s e y s e r v l e t < / a r t i f a c t I d > < v e r s i o n > 1 . 1 7 . 1 < / v e r s i o n > < / d e p e n d e c y >

QU ES?
Mapear peticiones HTTP a cdigo Java @GET / @POST / @PUT / @DELETE
@ P a t h ( " u s e r s " ) p u b l i cc l a s sU s e r s R e s o u r c e { @ G E T p u b l i cL i s t < U s e r >g e t U s e r s ( ){ . . . } }

G E T/ u s e r s

QU ES?
Mapear parmetros de URL a parmetros de entrada a los mtodos @PathParam / @QueryParam
@ G E T @ P a t h ( " / u s e r s / { u s e r I d } " ) p u b l i cU s e rg e t U s e r ( @ P a t h P a r a m ( " u s e r I d " )S t r i n gu s e r I d , @ Q u e r y P a r a m ( " d e b u g " )@ D e f a u l t V a l u e ( " 5 " )S t r i n gd e b u g ) { }

G E T/ u s e r s / 1 4 2 1 ? d e b u g = S

QU ES?
Declaracin del formato de los contenidos recibidos o emitidos @Consumes / @Produces
@ G E T @ P r o d u c e s ( M e d i a T y p e . A P P L I C A T I O N _ X M L ) p u b l i cL i s t < U s e r >g e t U s e r s ( ){ } @ P U T @ C o n s u m e s ( M e d i a T y p e . A P P L I C A T I O N _ J S O N ) p u b l i cv o i du p d a t e U s e r ( U s e ru s e r ){ }

MAPEO DE LA PETICIN HTTP:

MAPEO DE LA RESPUESTA HTTP:

OTRAS FUNCIONALIDADES DISPONIBLES:


Hypermedia Seguridad: OAuth, SSL, etc Logging Gestin de excepciones Soporte para Spring Framework API de acceso cliente Uploads: Jersey Multipart Testing: Jersey Test Framework Y mucho ms ...

Servicios REST: Jersey JAX-RS https://vimeo.com/53338309

CDIGO DE EJEMPLO:

https://github.com/borillo/template-jersey-spring-jpa

OBJETIVOS BSICOS

TESTING:

QU NOS GUSTARA CONSEGUIR?


Expresividad y sencillez en las validaciones Entorno integrado Arraque automtico de los servicios desarrollados Ejecucin automtica de las pruebas Restitucin del entorno

APROXIMACIN INICIAL

TESTING:

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB


A travs de un navegador web: Consulta de pginas Envo de formularios Subir ficheros al servidor

PLUGINS: PRUEBAS DESDE EL NAVEGADOR

REST client REST Console POSTman Advance REST client

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB


Desde lnea de comandos
c u r lX G E Th t t p : / / w w w . g o o g l e . e s /

O extrayendo las peticiones de las Chrome Tools

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB

REST SHELL
Consola sencilla de utilizar y con completado Compatible con HATEOAS (soporta discover) Fcil interaccin con servicios REST Carga y guardado de peticiones y respuestas Configuracin del contexto: Cabeceras, auth, etc Disponible en: GitHub REST-shell

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB


Definicin del recurso a utilizar:
h t t p : / / l o c a l h o s t : 8 0 8 0 : >b a s e U r ih t t p : / / x x x x x x x B a s eU R Is e tt o' h t t p : / / x x x x x x x '

Acceso a recursos:
>g e tr e s o u r c ep a r a m s" {p a r a m 1:' v a l u e '} " >p o s tr e s o u r c ed a t a" {p a r a m 1:' v a l u e '} "

>p o s tf r o md a t a . j s o n

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB


HATEOAS: discover:
>d i s c o v e r r e l h r e f = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = p e o p l e h t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n

>f o l l o wp e o p l e

h t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n : >l i s t r e l h r e f = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = p e o p l e . P e r s o n h t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n / 1 p e o p l e . s e a r c h h t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n / s e a r c h

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB


HATEOAS: get
h t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n : >g e t1 >G E Th t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n / 1 <2 0 0O K <E T a g :" 2 " <C o n t e n t T y p e :a p p l i c a t i o n / j s o n < { " l i n k s ":[{ " r e l ":" s e l f " , " h r e f ":" h t t p : / / l o c a l h o s t : 8 0 8 0 / p e r s o n / 1 " } ] , " n a m e ":" J o h nD o e " }

HTTP: ACCEDIENDO A CONTENIDOS EN LA WEB


Desde algn lenguaje de programacin como Java
D e f a u l t H t t p C l i e n tc l i e n t=n e wD e f a u l t H t t p C l i e n t ( ) ; c l i e n t . e x e c u t e ( n e wH t t p G e t ( " h t t p : / / w w w . u j i . e s / " ) ) ;

O con el API cliente de Jersey JAX-RS:


C l i e n tc l i e n t=C l i e n t . c r e a t e ( ) ; W e b R e s o u r c er e s o u r c e=c l i e n t . r e s o u r c e ( " h t t p : / / w w w . u j i . e s / " ) ; C l i e n t R e s p o n s er e s p o n s e=r e s o u r c e . a c c e p t ( " t e x t / h t m l " ) . g e t ( C l i e n t R e s p o n s e . c l a s s ) ; i f( r e s p o n s e . g e t S t a t u s ( )= =2 0 0 ){ S y s t e m . o u t . p r i n t l n ( r e s p o n s e . g e t E n t i t y ( S t r i n g . c l a s s ) ) ; }

HERRAMIENTAS DE AUTOMATIZACIN

TESTING:

SOAPUI

CREACIN DEL PROYECTO

SOAPUI

EJECUCIN DEL SERVICIO

SOAPUI

CREACIN DEL TESTCASE

SOAPUI

EJECUCIN DEL TEST

SOAPUI

AADIR UNA ASERCIN

SOAPUI

VALOR EXPECTED DE LA ASERCIN

SOAPUI

INFORME DE EJECUCIN DE LA SUITE

SOAPUI

INFORME DE EJECUCIN DE LA SUITE

JERSEY TEST FRAMEWORK

TESTING:

DEPENDENCIAS EXTRA NECESARIAS


Aadir al pom.xml las siguientes dependencias:
< d e p e n d e n c y > < g r o u p I d > c o m . s u n . j e r s e y . j e r s e y t e s t f r a m e w o r k < / g r o u p I d > < a r t i f a c t I d > j e r s e y t e s t f r a m e w o r k c o r e < / a r t i f a c t I d > < v e r s i o n > 1 . 1 7 . 1 < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > c o m . s u n . j e r s e y . j e r s e y t e s t f r a m e w o r k < / g r o u p I d > < a r t i f a c t I d > j e r s e y t e s t f r a m e w o r k g r i z z l y < / a r t i f a c t I d > < v e r s i o n > 1 . 1 7 . 1 < / v e r s i o n > < / d e p e n d e n c y >

DEFINICIN DE UN TEST
Cdigo necesario para arrancar el contenedor Java:
p u b l i cc l a s sU s e r s R e s o u r c e T e s te x t e n d sJ e r s e y T e s t{ p r i v a t eW e b R e s o u r c er e s o u r c e ; p u b l i cU s e r s R e s o u r c e T e s t ( ){ s u p e r ( n e wW e b A p p D e s c r i p t o r . B u i l d e r ( " c o m . d e c h a r l a s . s e r v i c e s " ) . c o n t e x t P a r a m ( " w e b A p p R o o t K e y " ," j e r s e y m a v e n . r o o t " ) . s e r v l e t C l a s s ( S e r v l e t C o n t a i n e r . c l a s s ) . b u i l d ( ) ) ; t h i s . r e s o u r c e=r e s o u r c e ( ) ; } @ O v e r r i d e p r o t e c t e dT e s t C o n t a i n e r F a c t o r yg e t T e s t C o n t a i n e r F a c t o r y ( ){ r e t u r nn e wG r i z z l y W e b T e s t C o n t a i n e r F a c t o r y ( ) ; } }

DEFINICIN DE UN TEST
Definicin de los tests:
p u b l i cc l a s sU s e r s R e s o u r c e T e s te x t e n d sJ e r s e y T e s t{ / /M t o d o sd ed e f i n i c i nd el as l i d ea n t e r i o r @ T e s t p u b l i cv o i dd e l e t e U s e r ( )t h r o w sE x c e p t i o n{ C l i e n t R e s p o n s er e s p o n s e=r e s o u r c e . p a t h ( " u s e r s / 1 " ) . a c c e p t ( " a p p l i c a t i o n / j s o n " ) . d e l e t e ( C l i e n t R e s p o n s e . c l a s s ) ; A s s e r t . a s s e r t E q u a l s ( S t a t u s . N O _ C O N T E N T . g e t S t a t u s C o d e ( ) , r e s p o n s e . g e t S t a t u s ( ) ) ; } }

CDIGO DE EJEMPLO:

https://github.com/borillo/template-jersey-spring-jpa

MEJORANDO LA EXPRESIVIDAD DE NUESTROS TESTS

OBJETIVOS
Las aserciones en jUnit no resultan nada semnticas:
A s s e r t . a s s e r t E q u a l s ( S t a t u s . N O _ C O N T E N T . g e t S t a t u s C o d e ( ) , r e s p o n s e . g e t S t a t u s ( ) ) ;

Vamos a ver como mejorarlas y as conseguir: Aserciones ms fciles de leer Menos duplicacin de cdigo en las pruebas Mejora de la semntica Facilidad de comprobacin de los resultados

MEJORANDO LA EXPRESIVIDAD DE NUESTROS TESTS:

HAMCREST

MEJORAR LOS TESTS CON HAMCREST


Matchers para asserts sobre nuestros servicios
p u b l i cc l a s sO k R e s p o n s e M a t c h e re x t e n d sT y p e S a f e M a t c h e r < C l i e n t R e s p o n s e >{ @ O v e r r i d e p u b l i cb o o l e a nm a t c h e s S a f e l y ( C l i e n t R e s p o n s er e s p o n s e ){ r e t u r n( r e s p o n s e! =n u l l& &r e s p o n s e . g e t S t a t u s ( )= =2 0 0 ) ; } p u b l i cv o i dd e s c r i b e T o ( D e s c r i p t i o nd e s c r i p t i o n ){ d e s c r i p t i o n . a p p e n d T e x t ( " n o taH T T P2 0 0r e s p o n s e " ) ; } @ F a c t o r y p u b l i cs t a t i c< T >M a t c h e r < C l i e n t R e s p o n s e >o k ( ){ r e t u r nn e wO k R e s p o n s e M a t c h e r ( ) ; } }

MEJORAR LOS TESTS CON HAMCREST


Uso del anterior matcher "OkResponseMatcher"
@ T e s t p u b l i cv o i dt e s t ( ){ C l i e n t R e s p o n s er e s p o n s e= r e s o u r c e . p a t h ( " u s e r s / 1 " ) . g e t ( C l i e n t R e s p o n s e . c l a s s ) ; . . . a s s e r t T h a t ( r e s p o n s e ,i s ( o k ( ) ) ) ; }

MEJORANDO LA EXPRESIVIDAD DE NUESTROS TESTS:

REST-ASSURED

DEFINICIN

Testing and validating REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into the Java domain.

DEPENDENCIAS EXTRA NECESARIAS


Aadir al pom.xml las siguientes dependencias:
< d e p e n d e n c y > < g r o u p I d > c o m . j a y w a y . r e s t a s s u r e d < / g r o u p I d > < a r t i f a c t I d > r e s t a s s u r e d < / a r t i f a c t I d > < v e r s i o n > 1 . 8 . 0 < / v e r s i o n > < s c o p e > t e s t < s c o p e > < / d e p e n d e n c y >

CARACTERSTICAS PRINCIPALES:
Integracin HTTP total: Cookies, auth, headers, ... Expresivo DSL para realizar las comprobaciones JsonPath y XmlPath para validar informacin Matchers Hamcrest para las validaciones Custom parsers por content type Dispone de un StubServer Logging Mucho ms!! Consulta la doc oficial :)

TEST: EL USERID DEBE SER 5


{ " U s e r " :{ " u s e r I d " :5 , " f r i e n d s " :[ { " u s e r I d " :2 3 , " r e f s " :[ 2 ,4 5 ,3 4 ,2 3 ,3 ,5 ] } ,{ " u s e r I d " :5 4 , " r e f s " :[ 5 2 ,3 ,1 2 ,1 1 ,1 8 ,2 2 ] } ] } }

g i v e n ( ) . e x p e c t ( ) . b o d y ( " U s e r . u s e r I d " ,e q u a l T o ( 5 ) ) . w h e n ( ) . g e t ( " / u s e r s " ) ;

TEST: 23 Y 54 DEBEN ESTAR ENTRE LOS AMIGOS


{ " U s e r " :{ " u s e r I d " :5 , " f r i e n d s " :[ { " u s e r I d " :2 3 , " r e f s " :[ 2 ,4 5 ,3 4 ,2 3 ,3 ,5 ] } ,{ " u s e r I d " :5 4 , " r e f s " :[ 5 2 ,3 ,1 2 ,1 1 ,1 8 ,2 2 ] } ] } }

e x p e c t ( ) . b o d y ( " U s e r . f r i e n d s . u s e r I d " ,h a s I t e m s ( 2 3 ,5 4 ) ) . w h e n ( ) . g e t ( " / u s e r s " ) ; ;

TEST: EL SALUDO DEBE SER PARA RICARDO


< g r e e t i n g > < f i r s t N a m e > R i c a r d o < / f i r s t N a m e > < l a s t N a m e > B o r i l l o < / l a s t N a m e > < / g r e e t i n g > e x p e c t ( ) . b o d y ( h a s X P a t h ( " / / f i r s t N a m e " , c o n t a i n s S t r i n g ( " R i c a r d o " ) ) ) . w h e n ( ) . p o s t ( " / g r e e t s " ) ;

e x p e c t ( ) . b o d y ( h a s X P a t h ( " / / f i r s t N a m e [ t e x t ( ) = ' R i c a r d o ' ] " ) ) . w h e n ( ) . p o s t ( " / g r e e t s " ) ;

INTEGRACIN CON JERSEY


Jersey Test Framework: Arranque servicios REST con Grizzly Configuramos REST-assured para conectar a estos servicios
R e s t A s s u r e d . b a s e U R I=" h t t p : / / l o c a l h o s t " ; R e s t A s s u r e d . p o r t=t h i s . r e s o u r c e . g e t U R I ( ) . g e t P o r t ( ) ; R e s t A s s u r e d . b a s e P a t h=" / a p p b a s e p a t h " ; R e s t A s s u r e d . a u t h e n t i c a t i o n=b a s i c ( " u s e r n a m e " , " p a s s w o r d " ) ;

CDIGO DE EJEMPLO:

https://github.com/borillo/template-rest-assured

DOCUMENTACIN DE SERVICIOS REST:

SWAGGER

QU ES SWAGGER?
Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. The overarching goal of Swagger is to enable client and documentation systems to update at the same pace as the server. With Swagger, deploying managing, and using powerful APIs has never been easier.

SWAGGER-UI: EL INTERFAZ DE SWAGGER


Conjunto de ficheros HTML/CSS/JavaScript sin ninguna dependencia adicional Documentacin atractiva y dinmica Permite la interaccin con los servicios REST Slo es necesario que nuestros servicios REST sean "swagger-compliant"

SWAGGER-UI: APIS REST "SWAGGER COMPLIANT"


Los servicios REST deben exportar su descripcin
{ a p i V e r s i o n :" 0 . 2 " , s w a g g e r V e r s i o n :" 1 . 1 " , b a s e P a t h :" h t t p : / / p e t s t o r e . s w a g g e r . w o r d n i k . c o m / a p i " , a p i s :[ { p a t h :" / p e t . { f o r m a t } " , d e s c r i p t i o n :" O p e r a t i o n sa b o u tp e t s " } , { p a t h :" / u s e r . { f o r m a t } " , d e s c r i p t i o n :" O p e r a t i o n sa b o u tu s e r " } ] }

SWAGGER-UI: POSIBILIDADES DE INTEGRACIN


Disponibles integraciones para mltiples lenguajes y frameworks: Java/Scala JAX-RS NodeJS Grails Symfony 2 Muchos ms ...

SWAGGER-UI: GENERACIN DEL CLIENTE HTML


Descargamos el cdigo del proyecto:
g i tc l o n eh t t p s : / / g i t h u b . c o m / w o r d n i k / s w a g g e r u i . g i t

Inicializamos dependencias y construimos:


n p mi n s t a l l n p mr u n s c r i p tb u i l d

En el directorio d i s ttenemos el UI listo para copiar a donde queramos

INTEGRACIN CON JERSEY JAX-RS

SWAGGER:

DEPENDENCIAS EXTRA NECESARIAS


Aadir al pom.xml las siguientes dependencias:
< d e p e n d e n c y > < g r o u p I d > c o m . w o r d n i k < / g r o u p I d > < a r t i f a c t I d > s w a g g e r j a x r s _ 2 . 9 . 1 < / a r t i f a c t I d > < v e r s i o n > 1 . 2 . 1 < / v e r s i o n > < / d e p e n d e n c y >

CARGA DEL PROVIDER DE SWAGGER EN JERSEY


Modificar la definicin de Jersey en el web.xml:
< s e r v l e t > < s e r v l e t n a m e > j e r s e y < / s e r v l e t n a m e > < s e r v l e t c l a s s > c o m . s u n . j e r s e y . s p i . c o n t a i n e r . s e r v l e t . S e r v l e t C o n t a i n e r < / s e r v l e t c l a s s > < i n i t p a r a m > < p a r a m n a m e > c o m . s u n . j e r s e y . c o n f i g . p r o p e r t y . p a c k a g e s < / p a r a m n a m e > < p a r a m v a l u e > c o m . y o u r . p r o j e c t ;c o m . w o r d n i k . s w a g g e r . j a x r s . l i s t i n g < / p a r a m v a l u e > < / i n i t p a r a m > . . . < / s e r v l e t >

PARMETROS BSICOS DE SWAGGER


Modificar la definicin de Jersey en el web.xml:
< s e r v l e t > . . . < i n i t p a r a m > < p a r a m n a m e > s w a g g e r . a p i . b a s e p a t h < / p a r a m n a m e > < p a r a m v a l u e > h t t p : / / l o c a l h o s t : 8 0 8 0 < / p a r a m v a l u e > < / i n i t p a r a m > < i n i t p a r a m > < p a r a m n a m e > a p i . v e r s i o n < / p a r a m n a m e > < p a r a m v a l u e > 1 . 0 < / p a r a m v a l u e > < / i n i t p a r a m > . . . < / s e r v l e t >

ANOTACIONES EN LOS SERVICIOS REST


Anotaciones Swagger en nuestro servicios Jersey:
@ P a t h ( " / p e t . j s o n " ) @ A p i ( v a l u e=" / p e t " ,d e s c r i p t i o n=" O p e r a t i o n sa b o u tp e t s " ) @ P r o d u c e s ( { " a p p l i c a t i o n / j s o n " } ) p u b l i cc l a s sP e t R e s o u r c e{ @ G E T @ P a t h ( " / { p e t I d } " ) @ A p i O p e r a t i o n ( v a l u e = " F i n dp e t " ,n o t e s = " E x t r an o t e s " ,r e s p o n s e C l a s s = " c o m . m o d e l . P e t " ) @ A p i E r r o r s ( v a l u e = { @ A p i E r r o r ( c o d e = 4 0 0 ,r e a s o n = " I n v a l i dI Ds u p p l i e d " ) , @ A p i E r r o r ( c o d e = 4 0 4 ,r e a s o n = " P e tn o tf o u n d " ) } ) p u b l i cR e s p o n s eg e t P e t B y I d( @ A p i P a r a m ( v a l u e = " P e tI D " ,r e q u i r e d = t r u e )@ P a t h P a r a m ( " p e t I d " )S t r i n gp e t I d ) t h r o w sN o t F o u n d E x c e p t i o n{ / /y o u rr e s o u r c el o g i c } . . . }

DOCUMENTACIN GENERADA
Accedemos al ndice de servicios documentados:
c u r lX G E Th t t p : / / l o c a l h o s t : 8 0 8 0 / a p i d o c s . j s o n { a p i V e r s i o n :" 1 . 0 " , s w a g g e r V e r s i o n :" 1 . 0 " , b a s e P a t h :" h t t p : / / l o c a l h o s t : 8 0 8 0 " , a p i s :[ { p a t h :" / a p i d o c s . { f o r m a t } / p e t " , d e s c r i p t i o n :" O p e r a t i o n sa b o u tp e t s " } ] }

DOCUMENTACIN GENERADA
Y luego a la descripcin de un servicio:
c u r lX G E Th t t p : / / l o c a l h o s t : 8 0 8 0 / a p i d o c s . j s o n / p e t { a p i V e r s i o n :" 1 . 0 " , s w a g g e r V e r s i o n :" 1 . 0 " , b a s e P a t h :" h t t p : / / l o c a l h o s t : 8 0 8 0 " , r e s o u r c e P a t h :" / p e t " , a p i s :[ { p a t h :" / p e t . { f o r m a t } / { p e t I d } " , d e s c r i p t i o n :" O p e r a t i o n sa b o u tp e t s " , o p e r a t i o n s :[{ p a r a m e t e r s :[ { n a m e :" p e t I d " , . . .

CDIGO DE EJEMPLO:

https://github.com/borillo/template-jersey-swagger

INTEGRACIN CON NODEJS & EXPRESS

SWAGGER:

CONFIGURACIN DE SWAGGER-UI
Copiamos swagger-ui al proyecto y lo inicializamos:
v a rd o c s _ h a n d l e r=e x p r e s s . s t a t i c ( _ _ d i r n a m e+' / s w a g g e r u i / ' ) ; a p p . g e t ( / ^ \ / d o c s ( \ / . * ) ? $ / ,f u n c t i o n ( r e q ,r e s ,n e x t ){ i f( r e q . u r l= = =' / d o c s ' ){ r e s . w r i t e H e a d ( 3 0 2 ,{' L o c a t i o n ':r e q . u r l+' / '} ) ; r e s . e n d ( ) ; r e t u r n ; } r e q . u r l=r e q . u r l . s u b s t r ( ' / d o c s ' . l e n g t h ) ; r e t u r nd o c s _ h a n d l e r ( r e q ,r e s ,n e x t ) ; } ) ;

DESCRIPCIN DE LOS MODELOS DE LA APLICACIN


Fichero models.js:
e x p o r t s . m o d e l s={ " U s e r " :{ " i d " :" U s e r " , " p r o p e r t i e s " :{ " i d " :{ " t y p e " : " l o n g " } , " n a m e " :{ " t y p e " : " s t r i n g " } } } } ;

DESCRIPCIN DE LOS RECURSOS REST


e x p o r t s . g e t U s e r B y I d={ ' s p e c ' :{ " d e s c r i p t i o n ":" u s e r s " , " p a t h " :" / u s e r s . { f o r m a t } / { u s e r I d } " , " n o t e s " :" R e t u r n sa nu s e rb a s e do nI D " , " s u m m a r y " :" F i n du s e rb yI D " , " m e t h o d " :" G E T " , " p a r a m s " :[ p a r a m . p a t h ( " u s e r I d " ," I Do ft h ef e t c h e du s e r " ," s t r i n g " ) ] , " r e s p o n s e C l a s s " :" U s e r " , " e r r o r R e s p o n s e s " :[s w a g g e r E r r o r s . i n v a l i d ( ' i d ' ) , s w a g g e r E r r o r s . n o t F o u n d ( ' u s e r ' )] , " n i c k n a m e " :" g e t U s e r B y I d " } , ' a c t i o n ' :f u n c t i o n( r e q , r e s ){ / /p r o c e s a m i e n t o } } ;

CONFIGURAMOS LOS PARMETROS DE SWAGGER


Modelos, recursos, punto de acceso y versin:
v a rs w a g g e r=r e q u i r e ( " . / s w a g g e r . j s " ) , r e s o u r c e s=r e q u i r e ( " . / r e s o u r c e s . j s " ) , m o d e l s=r e q u i r e ( " . / m o d e l s . j s " ) ; v a ra p p=e x p r e s s ( ) ; a p p . u s e ( e x p r e s s . b o d y P a r s e r ( ) ) ; s w a g g e r . s e t A p p H a n d l e r ( a p p ) ; s w a g g e r . a d d M o d e l s ( m o d e l s ) . a d d G e t ( r e s o u r c e s . g e t U s e r B y I d ) ; s w a g g e r . c o n f i g u r e ( " h t t p : / / l o c a l h o s t : 8 0 0 2 " ," 0 . 1 " ) ;

CDIGO DE EJEMPLO:

https://github.com/borillo/template-nodejs-swagger

PREGUNTAS?