Servicios Web Rest con Spring MVC

  • Published on
    26-Jul-2015

  • View
    248

  • Download
    5

Embed Size (px)

Transcript

<p> 1. ServiciosWeb RestFul Derechosreservados2015 2. QueesunWebService? S UnWebServiceesunapiezadeso9ware iden;cadaporunURI(UniformResource Iden;er). S Sumediodecomunicacinsefundamentaenel usodeXML,TEXT,JSON S XML S XMLNamespace,XMLSchema,Xpath,XSLT. S HTTP,JSON 3. Computacindistribuida Client-Server(C/S) silos Web-based computing Servers Clients Clients Servers Internet PDA Cell Phone Server LaptopKiosk Workstation Web Services/Peer-to-Peer SOA computing 4. TradicionalC/Svs.ServiciosWeb 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. WebApplica&gt;onvs.WebServices 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 6. RestFul 7. Historia S TransferenciadeEstadoRepresentacional (Representa;onalStateTransfer)oREST S Originadoenelao2000poreldoctorRoyFielding enlaUniversidaddeCaliforniaensutesisdoctoral S TesisEs;losdeArquitecturayelDiseode ArquitecturasdeSo9warebasadasenRedes S Principiosarquitectnicosdeso9wareparausarala WebcomounaplataformadeProcesamiento Distribuido 8. Historia S U;lizaXMLyHTTP,sinlasabstraccionesadicionales delosprotocolosbasadosenpatronesde intercambiodemensajescomoelprotocolode servicioswebSOAP. S Sehizopopularmuchosaosdespusconla creacindevariosframeworkquehacenfcilel desarrollodeserviciosRestFul 9. Historia S Muchasempresasconampliosservicioseninternet estnmigrandosusserviciosaRest. S Amazon S Facebook S Yahoo S Twiter 10. Los4principiosdeRest S U;lizalosmtodosHTTPdemaneraexplcita S Noman;eneestado S ExponeURIsconformadedirectorios S TransereXML,JavaScriptObjectNota;on(JSON),o ambos 11. UsodemtodosHTTPdemaneraexplcita S RestFulusadeformaexplicitalosmtodosHTTP paraejecutaraccionesdeCRUD VerboREST Accin POST Create GET Read PUT Update DELETE Delete 12. Noman&gt;eneestado S BasadoenelprotocoloHTTPsinestado. S Serviciosmassimplesdedisear,escribiryreu;lizar. S Elmanejodelosestadosdebeserhechoporel clientedelosservicios. 13. ExponeURIsconformadedirectorios S LasURIdelosserviciosRestdebenserintui;vas. S Sedebenpoderdeducirdeformafcil. S LasURIsedenencomounaestructuradecarpetas odirectorios. 14. ExponeURIsconformadedirectorios S Direccionesdeunblog hdp://www.vortexbird.org/discusion/temas/{tema} hdp://www.vortexbird.org/discusion/{ao}/{mes}/{dia}/{tema} hdp://www.vortexbird.org/discusion/2008/12/23/javaEE 15. ExponeURIsconformadedirectorios S Buenasprac;casparacrearURIsparaserviciosRest S Ocultarlatecnologausadaenelservidorqueapareceracomo extensindearchivos(.jsp,.php,.asp),demaneradepoder portarlasolucinaotratecnologasincambiarlasURI. S Mantenertodoelurienminsculas. S Sus;tuirlosespaciosconguionesoguionesbajos(unouotro). S Evitarelusodestringsdeconsulta. S Envezdeusarun404NotFoundsilape;cinesunaURI parcial,devolverunapginaounrecursopredeterminadocomo respuesta. S URIest;codeformaquelosusuariospuedancrearfavoritos"o bookmarks. 16. TransereXML,JSONoambos S XML:eXtensibleMarkupLanguage </p> <p> 17. TransereXML,JSONoambos S JSON:JavaScriptObjectNota;on {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} 18. TransereXML,JSONoambos S TiposMIMEmsusadosparalosservicioswebREST son: MIME-Type Content-Type JSON applica;on/json XML applica;on/xml XHTML applica;on/xhtml+xml TEXT text/plain 19. WebApplica&gt;onDescrip&gt;on Language(WADL) 20. WebApplica&gt;onDescrip&gt;onLanguage (WADL) S FormatoXMLusadoparaladescripcinde aplicacionesWebbasadasenHTTP. S ElpropsitodeWADLesdescribirlosserviciosResto cualquiersi;oweb. S CumpleunpapelsimilaraWSDLparaserviciosSOAP. S EstndaradministradoporW3C. 21. WebApplica&gt;onDescrip&gt;onLanguage (WADL) Yahoonewssearch 01 02 09 . 23 24 25 26 27 28 29 30 31 32 33 34 35 38 41 44 45;on&gt; 46 48 50 51 52;on&gt; 53;on&gt; 22. SpringMVC 23. SpringFramework 24. SpringMVC S SpringMVCesunodelosmdulosdelframework spring. S Implementacindelpatrnmodelovistacontrol S Cuentaconsoporteparacostrucciondeservicios REST S Modular,simpledeusarycongurar. S Esbasadoenlasanotaciones@Controllery @RequestMapping 25. SpringMVC S BasadosenelconceptodePOJO(PlainOldJava Object) S Clasessinextendsniimplements(Mar;nFowler) S TrminoheredadodeC/C++:PlainOldData(POD) S Tienesen;do,sonclasesdedatos 26. SpringMVC 27. AnotacionesSpringMVC Anotacin Descripcin @RequestMapping(method= RequestMethod.GET) Marcaelmtodocomoaccesibleatravsdel mtodoGETdeHTTP @RequestMapping(method= RequestMethod.POST) Marcaelmtodocomoaccesibleatravsdel mtodoPOSTdeHTTP @RequestMapping(method= RequestMethod.PUT) Marcaelmtodocomoaccesibleatravsdel mtodoPUTdeHTTP @RequestMapping(method= RequestMethod.DELETE) Marcaelmtodocomoaccesibleatravsdel mtodoDELETEdeHTTP @RequestMapping(method= RequestMethod.HEAD) Marcaelmtodocomoaccesibleatravsdel mtodoHEADdeHTTP 28. AnotacionesSpringMVC Anotacin Descripcin @RequestMapping Indicadondequedaalojadalaclaseoelmtodo.Por ejemplo/holaMundo/ @PathVariable Seusaparaasignaralosparmetrosdelosmtodosel nombredelpathusado. consumes="applica;on/ json" Seusaparaiden;carel;podemimequeconsumeel mtodouoperacindelservicios.Ejemplos"applica;on/ xml","applica;on/json" produce="applica;on/ json" Seusaparaiden;carel;podemimequeproduceel mtodouoperacindelservicios.Ejemplos"applica;on/ xml","applica;on/json 29. Tiposdedatossoportados TipodedatoJava MimeType byte[] Allmediatypes(*/*) ava.lang.String Alltextmediatypes(text/*) java.io.InputStream Allmediatypes(*/*) java.io.Reader Allmediatypes(*/*) java.io.File Allmediatypes(*/*) javax.ac;va;on.DataSource Allmediatypes(*/*) javax.xml.transform.Source XMLmediatypes(text/xml,applica;on/xml,and applica;on/*+xml) javax.xml.bind.JAXBElementandapplica;on- suppliedJAXBclasses XMLmediatypes(text/xml,applica;on/xml,and applica;on/*+xml) Mul;valuedMap Formcontent(applica;on/x-www-form- urlencoded) StreamingOutput Allmediatypes(*/*),MessageBodyWriteronly 30. Maven1/2 org.codehaus.jackson factId&gt;jackson-mapper-aslfactId&gt; 1.9.13 com.fasterxml.jackson.core factId&gt;jackson-corefactId&gt; 2.5.1 com.fasterxml.jackson.core factId&gt;jackson-databindfactId&gt; 2.5.1 31. Maven2/2 es&gt; 4.1.5.RELEASE es&gt; org.springframework factId&gt;spring-corefactId&gt; ${spring.version} org.springframework factId&gt;spring-webfactId&gt; ${spring.version} org.springframework factId&gt;spring-webmvcfactId&gt; ${spring.version} 32. mvc-dispatcher-servlet.xml 33. web.xml org.springframework.web.context.ContextLoaderListenerclass&gt; org.springframework.web.context.request.RequestContextListenerclass&gt; contextCongLoca&gt;onname&gt; classpath*:/applica&gt;onContext.xml,classpath*:/mvc-dispatcher-servlet.xmlvalue&gt; param&gt; mvc-dispatchername&gt; org.springframework.web.servlet.DispatcherServletclass&gt; 1on-startup&gt; mvc-dispatchername&gt; /controller/*pajern&gt; mapping&gt; 34. CdigodeejemploServicio @Controller @RequestMapping("/operacionesMatema&gt;cas") publicclassOperacionesMatema&gt;cas{ @RequestMapping(value="/sumar/{numeroUno}/{numeroDos}",method=RequestMethod.GET) public@ResponseBodyResultadosumar(@PathVariableIntegernumeroUno,@PathVariableInteger numeroDos,ModelMapmodel){ Resultadoresultado=newResultado(); resultado.setResultado(numeroUno+numeroDos); returnresultado; } } hdp://127.0.0.1:8080/demoRestSpringMVC/controller/operacionesMatema;cas/sumar/3/4 35. CdigodeejemploCliente @RunWith(SpringJUnit4ClassRunner.class) @ContextCongura;on("/applica;onContext.xml") publicclassClienteOperacionesMatema&gt;cas{ @Test publicvoidtest(){ RestTemplaterestTemplate=newRestTemplate(); Resultadoresultado=restTemplate.getForObject("hdp://127.0.0.1:8080/demoRestSpringMVC/ controller/operacionesMatema;cas/sumar/3/4",Resultado.class); assertEquals(resultado.getResultado(),newInteger(7)); System.out.println(resultado.getResultado()); } } hdp://127.0.0.1:8080/demoRestSpringMVC/controller/operacionesMatema;cas/sumar/3/4 36. WADLdeejemplo onxmlns="hjp://research.sun.com/wadl/2006/10"&gt; cas"&gt; onmediaType="applica&gt;on/xml"/&gt; onmediaType="applica&gt;on/json"/&gt; onmediaType="text/plain"/&gt; on&gt; hdp://127.0.0.1:8080/demoRest/services/applica;on.wadl hdp://127.0.0.1:8080/demoRest/operacionesMatema;cas/services?_wadl hdp://127.0.0.1:8080/demoRest/operacionesMatema;cas/resources/applica;on.wadl 37. TallerdesarrollodeserviciosRest S ServicioOperacionesMatem;cas S Sumar S Restar S Mul;plicar S Dividir S ClientedelservicioOperacionesMatema;cas 38. TallerdesarrollodeserviciosRest S ServiciodeEn;dadparaCliente S Crear S Modicar S Borrar S ConsultarporID S ConsultarTodos S ClientedelservicioRest 39. ENLACES S hdp://docs.spring.io/spring-framework/docs/ current/spring-framework-reference/html/ mvc.html#mvc-introduc;on 40. ENLACES S hdp://webservices.xml.com/ S hdps://blueprints.dev.java.net/books.html 41. Informacindecontacto S Si;oWeb:www.vortexbird.com S Blog:hdp://blog.vortexbird.com S Contactovamail:dgomez@vortexbird.com S Telfonos:+57-(3164824629) S Cali,Colombia </p>