SlideShare uma empresa Scribd logo
1 de 14
Servicios REST
Bases de la tecnología
   con Spring MVC
José Ramón Berenguer   Ana María Gómez
¿Qué es REST?
¿Por qué REST?
                                        REST(CATE)
       WSDL   UDDI            Representational State Transfer
                                          Roy Fielding , 2000
       SOAP



• Verbose                     • Sencillez
                              Técnica de arquitectura software para
• Complejidad                 • Eficiencia
                                sistemas hipermedia distribuidos
                                     como la Word Wide Web
• Alta curva de aprendizaje   • Aprovecha características
• Dificil de mantener         de la infraestructura Web
• Alto consumo de recursos
• No optimizado para web
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.
¿Cuándo usamos REST?
 Servicio Web sin estado     Requerimientos
 Productor y consumidor      complejos no funcionales:
  conocen el contexto y           Transacciones
  contenido                       Información contextual
 Ancho de banda                  Estado
  importante y necesita ser   Contrato formal con
  limitado                    funcionalidad de la
 Distribución de Servicios   interfaz (WSDL)
  Web o agregación de         Procesado asíncrono
  sitios Web existentes
REST + Spring
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> <context-param>
                           <param-name>contextConfigLocation</param-name>
 <servlet>
      <param-name>contextConfigLocation</param-name>
                           <param-value>/WEB-INF/spring/root-context.xml</param-value>
                     </context-param>
       <servlet-name>appServlet</servlet-name>
      <param-value>/WEB-INF/spring/root-context.xml</param-value>
                     <!-- Creates the Spring Container shared by all Servlets and Filters -->
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<listener>
</context-param> <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
       <init-param> </listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><param-name>contextConfigLocation</param-name>
                     <!-- Processes application requests -->
                    <servlet>
         <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
                         <servlet-name>appServlet</servlet-name>

      </init-param> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                         <init-param>
                             <param-name>contextConfigLocation</param-name>
      <load-on-startup>1</load-on-startup>
                            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
                         </init-param>
 </servlet>              <load-on-startup>1</load-on-startup>
                          </servlet>


 <servlet-mapping> <servlet-mapping>
                          <servlet-name>appServlet</servlet-name>
                          <url-pattern>/</url-pattern>
       <servlet-name>appServlet</servlet-name>
                    </servlet-mapping>

       <url-pattern>/</url-pattern>
                    </web-app>

 </servlet-mapping>
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 -->


       <annotation-driven@Controller programming model -->
           <!-- Enables the Spring MVC
           <annotation-driven />          />
     <beans:beanHTTP GET requests for /resources/** by efficiently serving up static resources in the
     <context:component-scan base-package="com.paradigma.example" />
           <!-- Handles
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           ${webappRoot}/resources directory -->
           <resources mapping="/resources/**" location="/resources/" />
     <beans:property name="prefix" value="/WEB-INF/views/" />-->
           <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory
     <beans:property name="suffix" value=".jsp" />
           <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           <beans:property name="prefix" value="/WEB-INF/views/" />
     </beans:bean>name="suffix" value=".jsp" />
           <beans:property
           </beans:bean>

             <context:component-scan base-package="com.paradigma.example" />



             </beans:beans>
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>
 <properties>  <version>1.0.0-BUILD-SNAPSHOT</version>
               <properties>
            <java-version>1.6</java-version>
               <java-version>1.6</java-version>
               <org.springframework-version>3.1.0.RELEASE</org.springframework-version>
 <dependency>  <org.aspectj-version>1.6.9</org.aspectj-version>
            <org.springframework-version>3.1.0.RELEASE</org.springframework-version>
               <org.slf4j-version>1.5.10</org.slf4j-version>
            <groupId>org.codehaus.jackson</groupId>
               </properties>
            <org.aspectj-version>1.6.9</org.aspectj-version>
               <dependencies>
            <artifactId>jackson-mapper-asl</artifactId>
               <!-- Spring -->
            <org.slf4j-version>1.5.10</org.slf4j-version>
               <dependency>

            <version>1.6.4</version>
 </properties>
               <groupId>org.springframework</groupId>
               <artifactId>spring-context</artifactId>
               <version>${org.springframework-version}</version>
 </dependency> <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>
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 = "/{id}", methodmethod = RequestMethod.GET)= "application/xml")
    @RequestMapping(value "/{id}", = RequestMethod.GET ,produces
    @RequestMapping(value = = “/", method = RequestMethod.GET)
      @ResponseBody
                          @PathVariable
      public Person person(@RequestParam        String id, Model model) {…}
     }
Hello REST!
Servicio REST con Spring MVC
     Caso práctico
Diseño de la interfaz
                                                    TVShow
• Identificar entidades                   • id
                                          •name
                                          • genre
  conceptuales                            • year
                                          • rates


• 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
¿Preguntas?

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Charla REST API
Charla REST APICharla REST API
Charla REST API
 
Simplemente REST
Simplemente RESTSimplemente REST
Simplemente REST
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Desarrollando con APIs
Desarrollando con APIsDesarrollando con APIs
Desarrollando con APIs
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRs
 
Servicios Web Rest con Spring MVC
Servicios Web Rest con Spring MVCServicios Web Rest con Spring MVC
Servicios Web Rest con Spring MVC
 
Servicios Rest con Jersey
Servicios Rest con Jersey Servicios Rest con Jersey
Servicios Rest con Jersey
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RS
 
Servicios web
Servicios webServicios web
Servicios web
 
Java Web Services - REST
Java Web Services - RESTJava Web Services - REST
Java Web Services - REST
 
Java Web Services - Introduccion
Java Web Services - IntroduccionJava Web Services - Introduccion
Java Web Services - Introduccion
 
Asp
AspAsp
Asp
 
Definición de apis con swagger
Definición de apis con swaggerDefinición de apis con swagger
Definición de apis con swagger
 
Facelets
FaceletsFacelets
Facelets
 
Web Services JAX-RS RESTful y SOAP
Web Services JAX-RS RESTful y SOAPWeb Services JAX-RS RESTful y SOAP
Web Services JAX-RS RESTful y SOAP
 
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado   1 IntroduccióN Al Desarrollo WebCurso Java Avanzado   1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
 
introduccion a Ajax
introduccion a Ajaxintroduccion a Ajax
introduccion a Ajax
 
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
 
Aplicaciones Web
Aplicaciones WebAplicaciones Web
Aplicaciones Web
 
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
 

Semelhante a Spring REST Services

Semelhante a Spring REST Services (20)

15a. Reunion de SpringHispano.org y grails.org.mx
15a. Reunion de SpringHispano.org y grails.org.mx15a. Reunion de SpringHispano.org y grails.org.mx
15a. Reunion de SpringHispano.org y grails.org.mx
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
Apache click
Apache clickApache click
Apache click
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
Servicios web
Servicios webServicios web
Servicios web
 
Primefaces
PrimefacesPrimefaces
Primefaces
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web
Servicios webServicios web
Servicios web
 
Java Web - JSF
Java Web - JSFJava Web - JSF
Java Web - JSF
 
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
Guia de estudio para Oracle Certified Java EE 6 Web Component DeveloperGuia de estudio para Oracle Certified Java EE 6 Web Component Developer
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
Taller integracion jsf spring
Taller integracion jsf springTaller integracion jsf spring
Taller integracion jsf spring
 
Modulo13 Web Services
Modulo13 Web ServicesModulo13 Web Services
Modulo13 Web Services
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Clase_MVC_I.pptx
Clase_MVC_I.pptxClase_MVC_I.pptx
Clase_MVC_I.pptx
 
06. jsf (java server faces) (1)
06. jsf (java server faces) (1)06. jsf (java server faces) (1)
06. jsf (java server faces) (1)
 

Mais de Paradigma Digital

Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Paradigma Digital
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxParadigma Digital
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixParadigma Digital
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API ManagementParadigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxParadigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microserviciosParadigma Digital
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?Paradigma Digital
 

Mais de Paradigma Digital (20)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 

Spring REST Services

  • 1. Servicios REST Bases de la tecnología con Spring MVC José Ramón Berenguer Ana María Gómez
  • 3. ¿Por qué REST? REST(CATE) WSDL UDDI Representational State Transfer Roy Fielding , 2000 SOAP • Verbose • Sencillez Técnica de arquitectura software para • Complejidad • Eficiencia sistemas hipermedia distribuidos como la Word Wide Web • Alta curva de aprendizaje • Aprovecha características • Dificil de mantener de la infraestructura Web • Alto consumo de recursos • No optimizado para 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 Requerimientos  Productor y consumidor complejos no funcionales: conocen el contexto y Transacciones contenido Información contextual  Ancho de banda Estado importante y necesita ser Contrato formal con limitado funcionalidad de la  Distribución de Servicios interfaz (WSDL) Web o agregación de Procesado asíncrono sitios Web existentes
  • 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> <context-param> <param-name>contextConfigLocation</param-name> <servlet> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <servlet-name>appServlet</servlet-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> <!-- Creates the Spring Container shared by all Servlets and Filters --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <listener> </context-param> <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <init-param> </listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><param-name>contextConfigLocation</param-name> <!-- Processes application requests --> <servlet> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> <servlet-name>appServlet</servlet-name> </init-param> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <load-on-startup>1</load-on-startup> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> </servlet> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> <servlet-name>appServlet</servlet-name> </servlet-mapping> <url-pattern>/</url-pattern> </web-app> </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 --> <annotation-driven@Controller programming model --> <!-- Enables the Spring MVC <annotation-driven /> /> <beans:beanHTTP GET requests for /resources/** by efficiently serving up static resources in the <context:component-scan base-package="com.paradigma.example" /> <!-- Handles class="org.springframework.web.servlet.view.InternalResourceViewResolver"> ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <beans:property name="prefix" value="/WEB-INF/views/" />--> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory <beans:property name="suffix" value=".jsp" /> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> </beans:bean>name="suffix" value=".jsp" /> <beans:property </beans:bean> <context:component-scan base-package="com.paradigma.example" /> </beans:beans>
  • 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> <properties> <version>1.0.0-BUILD-SNAPSHOT</version> <properties> <java-version>1.6</java-version> <java-version>1.6</java-version> <org.springframework-version>3.1.0.RELEASE</org.springframework-version> <dependency> <org.aspectj-version>1.6.9</org.aspectj-version> <org.springframework-version>3.1.0.RELEASE</org.springframework-version> <org.slf4j-version>1.5.10</org.slf4j-version> <groupId>org.codehaus.jackson</groupId> </properties> <org.aspectj-version>1.6.9</org.aspectj-version> <dependencies> <artifactId>jackson-mapper-asl</artifactId> <!-- Spring --> <org.slf4j-version>1.5.10</org.slf4j-version> <dependency> <version>1.6.4</version> </properties> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> </dependency> <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>
  • 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 = "/{id}", methodmethod = RequestMethod.GET)= "application/xml") @RequestMapping(value "/{id}", = RequestMethod.GET ,produces @RequestMapping(value = = “/", method = RequestMethod.GET) @ResponseBody @PathVariable public Person person(@RequestParam String id, Model model) {…} }
  • 12. Servicio REST con Spring MVC Caso práctico
  • 13. Diseño de la interfaz TVShow • Identificar entidades • id •name • genre conceptuales • year • rates • 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