$30 off During Our Annual Pro Sale. View Details »

SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC

Paradigma
October 30, 2012

SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC

En este seminario se impartirá una introducción al concepto detrás de la tecnología REST. Adicionalmente, se introducirá al asistente a la implementación de un servicio REST, usando para ello el stack que ofrece el framework Spring, y mas concretamente las nuevas versiones de Spring MVC”. Con este seminario abrimos el nuevo curso 2012/2013, en el que Paradigma irá cada tres semanas aproximadamente ofreciendo una temática nueva.
Más información: http://www.paradigmatecnologico.com/seminarios/seminario-servicios-rest-bases-de-la-tecnologia-y-soporte-con-spring-mvc/

Paradigma

October 30, 2012
Tweet

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. Servicios REST Bases de la tecnología con Spring MVC José

    Ramón Berenguer Ana María Gómez
  2. ¿Qué es REST?

  3. ¿Por qué REST? WSDL UDDI SOAP • Verbose • Complejidad

    • Alta curva de aprendizaje • Dificil de mantener • Alto consumo de recursos • No optimizado para web REST(CATE) Representational State Transfer Roy Fielding , 2000 • Sencillez • Eficiencia • Aprovecha características de la infraestructura Web Técnica de arquitectura software para sistemas hipermedia distribuidos como la Word Wide Web
  4. Principios REST • Protocolo cliente/servidor sin estado Cada mensaje HTTP

    contiene toda la información necesaria para comprender la petición. Ni cliente ni servidor necesitan recordar ningún estado. • Operaciones bien definidas HTTP en sí define un conjunto de operaciones: POST, GET, PUT y DELETE. • Sintaxis universal Cada recurso es direccionable únicamente a través de su URI. • Soporte multiformato HTML, XML, etc.
  5. ¿Cuándo usamos REST?  Servicio Web sin estado  Productor

    y consumidor conocen el contexto y contenido  Ancho de banda importante y necesita ser limitado  Distribución de Servicios Web o agregación de sitios Web existentes Requerimientos complejos no funcionales: Transacciones Información contextual Estado Contrato formal con funcionalidad de la interfaz (WSDL) Procesado asíncrono
  6. REST + Spring

  7. REST en Spring MVC Configuración web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app

    version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Processes application requests --> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
  8. REST en Spring MVC Configuración *-context.xml <?xml version="1.0" encoding="UTF-8"?> <beans:beans

    xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans- 3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring- context-3.0.xsd"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> <context:component-scan base-package="com.paradigma.example" /> </beans:beans> <annotation-driven /> <context:component-scan base-package="com.paradigma.example" /> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean>
  9. REST en Spring MVC Configuración pom.xml <?xml version="1.0" encoding="UTF-8"?> <project

    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.paradigma</groupId> <artifactId>example</artifactId> <name>example</name> <packaging>war</packaging> <version>1.0.0-BUILD-SNAPSHOT</version> <properties> <java-version>1.6</java-version> <org.springframework-version>3.1.0.RELEASE</org.springframework-version> <org.aspectj-version>1.6.9</org.aspectj-version> <org.slf4j-version>1.5.10</org.slf4j-version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> ….. <plugins>plugins> </build> </project> <properties> <java-version>1.6</java-version> <org.springframework-version>3.1.0.RELEASE</org.springframework-version> <org.aspectj-version>1.6.9</org.aspectj-version> <org.slf4j-version>1.5.10</org.slf4j-version> </properties> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.6.4</version> </dependency>
  10. REST en Spring MVC 3.0 Controladores • @PathVariable • Negociación

    del contenido • @RequestBody/@ResponseBody/@ResponseStatus • Validación en la declaración: @Valid @Controller @RequestMapping("/person") public class PersonController { @RequestMapping(value = “/", method = RequestMethod.GET) public Person person(@RequestParam String id, Model model) {…} } @RequestMapping(value = "/{id}", method = RequestMethod.GET) @PathVariable @RequestMapping(value = "/{id}", method = RequestMethod.GET ,produces = "application/xml") @ResponseBody
  11. Hello REST!

  12. Servicio REST con Spring MVC Caso práctico

  13. Diseño de la interfaz • Identificar entidades conceptuales • Crear

    una URI para cada recurso (nombres, no verbos) https://www.myrest.com/tvshowrest/provider/tvshow/{id} • Definir que métodos son soportados por cada URI GET, PUT y DELETE • Formato de cada recurso XML • id •name • genre • year • rates TVShow
  14. ¿Preguntas?