Professional Documents
Culture Documents
JERSEY JAX-RS
YO
{ nm :'iad Brlo, ae Rcro oil' cmay:'nvria JueI, opn Uiestt am ' mi :'oil@j.s, al brlouie' sca :{ oil titr:'brlo, wte @oil' bo :'m-tl.o' lg xluiscm, lnei :'ikdncmi/oil' ikdn lnei.o/nbrlo } }
YO
NDICE
Servicios web HTTP y REST Uso Jersey JAX-RS Testing El futuro de JAX-RS
SERVICIOS WEB
WIKIPEDIA:
"Un servicio web es una tecnologa que utiliza un conjunto de protocolos y estndares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programacin diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet."
DISTINTAS APROXIMACIONES:
SOAP. Formato XML e independiente del protocolo. Implementado en Metro (JAX-WS) "SOAP (Simple Object Access Protocol) es un protocolo estndar que define cmo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML"
DISTINTAS APROXIMACIONES:
REST. Cualquier formato sobre HTTP. Implementado en Jersey (JAX-RS) "Cualquier interfaz web simple sin las abstracciones adicionales de los protocolos basados en patrones de intercambio de mensajes"
REST != RPC
Evitar cosas como:
/eUuro gtsai /eAlsais gtlAuro /oiiaunayd mdfcCetBI
HTTP Y REST
EJEMPLOS:
Lista todos los coches o recupera uno
GT/as E cr GT/as13AW E cr/24A
USO
Nos centramos en nuestro negocio: Buen diseo del software Exposicin de nuestro modelo como recursos Diseo modular Soporte de varios formatos y operaciones
DISEO DE UN API
JERSEY JAX-RS
QU ES?
Jersey es la implementacin Java de referencia del estndar JAX-RS para la definicin de servicios REST:
hts/jre.e.aant tp:/esydvjv.e/
QU ES?
Mapear peticiones HTTP a cdigo Java @GET / @POST / @PUT / @DELETE
@ah"sr" Pt(ues) pbi casUeseore ulc ls srRsuc { @E GT pbi Ls<sr gtsr( { ulc itUe> eUes) .. . } }
GT/sr E ues
QU ES?
Mapear parmetros de URL a parmetros de entrada a los mtodos @PathParam / @QueryParam
@E GT @ah"ues{srd" Pt(/sr/ueI}) pbi Ue gtsr ulc sr eUe( @ahaa(ueI" Srn ueI, PtPrm"srd) tig srd @urPrm"eu" @ealVle"" Srn dbg Qeyaa(dbg) Dfutau(5) tig eu) { }
GT/sr/41dbgS E ues12?eu=
QU ES?
Declaracin del formato de los contenidos recibidos o emitidos @Consumes / @Produces
@E GT @rdcsMdayeAPIAINXL Poue(eiTp.PLCTO_M) pbi Ls<sr gtsr( { ulc itUe> eUes) } @U PT @osmsMdayeAPIAINJO) Cnue(eiTp.PLCTO_SN pbi vi udtUe(srue){ ulc od paesrUe sr }
Ejemplo:
hts/gtu.o/oil/aaraso-ette/atreape/esysml tp:/ihbcmbrlojv-odhwrs/remse/xmlsjre-ipe
Ejemplo:
hts/gtu.o/oil/aaraso-ette/atreape/esymvn tp:/ihbcmbrlojv-odhwrs/remse/xmlsjre-ae
EJEMPLO BSICO:
pcaecmdcalsts.evcs akg o.ehra.etsrie; @ah"sr" Pt(ues) pbi casUeRsuc { ulc ls sreore @E GT pbi Srn syel( { ulc tig aHlo) rtr "el wrd!" eun Hlo ol!!; } }
INICIO DE LA APLICACIN:
Eclipse "Run on server" o j t y r nen Maven: et:u
2-c-022:43 cmsnjre.p.oePcaeRsucCni ii 7ot21 00:1 o.u.esyaicr.akgseoreofg nt IF:Sann frro rsuc adpoie cassi tepcae: NO cnig o ot eore n rvdr lse n h akgs cmfsexljcsnjxsjo o.atrm.ako.ar.sn cmdcalssrie o.ehra.evcs 2-c-022:43 cmsnjre.p.oeSannRsucCni lglse 7ot21 00:1 o.u.esyaicr.cnigeoreofg oCass IF:Ro rsuc cassfud NO ot eore lse on: cascmdcalssrie.sreore ls o.ehra.evcsUeRsuc 2-c-022:43 cmsnjre.p.oeSannRsucCni lglse 7ot21 00:1 o.u.esyaicr.cnigeoreofg oCass IF:Poie cassfud NO rvdr lse on: cascmfsexljcsnjxsjo.akoJxJoPoie ls o.atrm.ako.ar.snJcsnabsnrvdr cascmfsexljcsnjxsjo.snasEcpinapr ls o.atrm.ako.ar.snJoPrexetoMpe cascmfsexljcsnjxsjo.snapnEcpinapr ls o.atrm.ako.ar.snJoMpigxetoMpe cascmfsexljcsnjxsjo.akoJoPoie ls o.atrm.ako.ar.snJcsnsnrvdr IF:Iiitn Jre apiain vrin'esy 11 0/921 0:4P' NO ntaig esy plcto, eso Jre: .4 62/02 51 M
EJEMPLO JSON:
Partimos de los datos datos en forma de Java Bean:
@mRoEeet Xlotlmn pbi casUe { ulc ls sr piaeLn i; rvt og d piaeSrn nm; rvt tig ae }
USO DE JACKSON
GT-GT- "cet apiainjo"ht:/oahs:00ues E XE H Acp: plcto/sn tp/lclot88/sr GT-GT- "cet tx/m"ht:/oahs:00ues E XE H Acp: etxl tp/lclot88/sr
Cin cin =Cin.rae) let let letcet(; Wbeorersuc =cin.eore"tp/lclot88/esymvnrs"; eRsuc eore letrsuc(ht:/oahs:00jre-ae/et) CinRsos rsos =rsuc.ah"ues1)gtCinRsos.ls) letepne epne eorept(/sr/".e(letepnecas; Ue ue =rsos.eEtt(srcas sr sr epnegtniyUe.ls)
BSQUEDA EN TWITTER:
Recuperacin del resultado como un JSONObject:
Cin cin =Cin.rae) let let letcet(; cin.dFle(e Lgigitr); letaditrnw ognFle() Wbeorersuc =cin.eore"tp/sac.wte.o/) eRsuc eore letrsuc(ht:/erhtitrcm"; CinRsos rsos =rsuc.ah"erhjo" letepne epne eorept(sac.sn) .urPrm"" "rceraso".e(letepnecas; qeyaa(q, oal+odhw)gtCinRsos.ls) JOOjc dt =rsos.eEtt(SNbetcas; SNbet aa epnegtniyJOOjc.ls) Asr.setqasSau.Kgtttsoe) rsos.eSau() setasrEul(ttsO.eSauCd(, epnegttts); Asr.setqas1 dt.eIt"ae); setasrEul(, aagtn(pg")
GESTIN DE ERRORES
Uso del intefaz ExceptionMapper para interceptar excepciones:
@rvdr Poie pbi casCmoEcpinapripeet EcpinaprEcpin { ulc ls omnxetoMpe mlmns xetoMpe<xeto> @vrie Oerd pbi Rsos tRsos(xeto ecpin { ulc epne oepneEcpin xeto) lgerr"ade b Ecpinapr,ecpin; o.ro(Hnld y xetoMpe" xeto) rtr Rsos.evrro(.yeMdayeTX_LI) eun epnesreErr)tp(eiTp.ETPAN .niyecpingtesg()bid) ett(xeto.eMsae).ul(; } }
TESTING
DEFINICIN
"Unit testing is a software verification and validation method in which a programmer tests if individual units of source code are fit for use. A unit is the smallest testable part of an application"
BENEFICIOS:
Facilitar el cambio y el refactoring Diseo simple y modular del cdigo Sirve como documentacin Ahorra mucho tiempo y costes con futuros bugs
HERRAMIENTAS
Pruebas de cdigo: jUnit Pruebas de interfaz: Selenium Pruebas de integracin: SoapUI o Jersey Test Framework Pruebas de estrs: jMeter con independencia del lenguaje en el que est desarrollado el servicio
DEFINICIN DE UN TEST
Cdigo necesario para arrancar el contenedor Java:
pbi casUeseoreetetnsJreTs { ulc ls srRsucTs xed esyet piaeWbeorersuc; rvt eRsuc eore pbi Ueseoreet){ ulc srRsucTs( sprnwWbpDsrpo.ule(cmdcalssrie" ue(e eApecitrBidr"o.ehra.evcs) .otxPrm"eApote" "esymvnro" cnetaa(wbpRoKy, jre-ae.ot) .eveCasSrltotie.ls)bid); srltls(eveCnanrcas.ul() ti.eore=rsuc(; hsrsuc eore) } @vrie Oerd poetdTsCnanratr gtetotieFcoy){ rtce etotieFcoy eTsCnanratr( rtr nwGizyeTsCnanratr(; eun e rzlWbetotieFcoy) } }
DEFINICIN DE UN TEST
Definicin de los tests:
pbi casUeseoreetetnsJreTs { ulc ls srRsucTs xed esyet / Mtdsd dfnc d l sieatro / oo e eiiin e a ld neir @et Ts pbi vi dltUe( trw Ecpin{ ulc od eeesr) hos xeto CinRsos rsos =rsuc.ah"sr/" letepne epne eorept(ues1) .cet"plainjo" acp(apito/sn) .eeeCinRsos.ls) dlt(letepnecas; Asr.setqasSau.OCNETgtttsoe) setasrEul(ttsN_OTN.eSauCd(, rsos.eSau() epnegttts); } }
EL FUTURO DE JAX-RS
JAX-RS 2.0
El futuro es ...
PREGUNTAS?