Ir al contenido principal

REST sevices con Spring Boot en minutos y sin tener que saber nada

Código fuente del articulo:

Hola, en este tutorial te muestro como crear un servicio REST con Spring que implementa todas las operaciones GET, POST, PUT y DELETE con solo unas pocas anotaciones y nada de XML. El paso uno es configurar un ambiente para trabajar con Spring y crear un proyecto Spring Boot para eso pásate por este tutorial. Porque vamos a trabajar sobre el mismo proyecto.

https://programmingbabel.blogspot.com/2017/09/crear-una-aplicacion-con-spring-boot.html

una vez terminado ese tutorial tendrás una aplicación web, en eclipse, que utiliza Spring Boot y que se vera así:


así que antes de empezar algo de teoría.

los servicios RESTful (Representational State Transfer) son servicios web que utilizan HTTP como fue ideado desde un principio, es decir sin agregar un protocolo extra como SOAP y sin hundirse en un mar de XML. Así que la idea es exponer un recurso en una url y manipularlo utilizando las operaciones que ya están definidas en HTTP. las operaciones son crear, leer, actualizar y borrar es decir; PUT, GET, POST y DELETE. por lo general en los servicios RESTful se negocia utilizando Objetos definidos en el formato JSON que es una alternativa al XML mas ligera es decir si en xml tenias esto:

<Persona>
<Nombre>juan<Nombre/>
<Apellido>Perez<Apellido/>
<Persona/>

En JSON vas a tener esto

{"Persona":{"Nombre":"Juan", "Apellido":"Perez"}}

Sin mas teoría pasemos a la acción.

en nuestro proyecto ya creado crearemos una clase persona que vamos a utilizar para negociar en nuestro servicio.

public class Persona {

private String nombre, apellido;

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

}
se vera así:
Ahora crearemos otra clase y la llamaremos ServicioPersonas esta sera la clase principal y sera la encargada de contener las operaciones, esta clase la marcaremos con la etiqueta @RestController. esta etiqueta le indicara a Spring que esta clase manejara las peticiones http hechas a la aplicación web:

package com.virtuallabs.spring;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class ServicioPersonas {

}

se vera así:


Con esto ya tenemos el controlador ahora falta agregar las operaciones.

La primer operación que agregaremos sera PUT, que nos permitirá actualizar o agregar nuevas personas, para esto añadimos un método putPersona y lo marcamos con la etiqueta @PutMapping("/put/{idPersona}"), el método se vera así
@PutMapping("/put/{idPersona}")
public Persona putPersona(@PathVariable int idPersona, @RequestBody Persona persona){

personas.put(idPersona, persona);
return persona;
}

y tendrá dos anotaciones mas

@PathVariable: esto quiere decir que en la url enviaremos un id en la sección marcada como {idPersona}. es decir que al final nuestra url tendra un /put/1.

@RequestBody: esto quiere decir que también al hacer el llamado enviaremos un objeto JSON que se puede mapear a una clase de tipo persona.

La siguiente operación sera GET, que nos permitirá obtener personas. Para esto añadimos un método getPersona y lo marcamos con la etiqueta @GetMapping("/get") el método se vera así

@GetMapping("/get")
    public Persona getPersona(@RequestParam("idPersona") int idPersona) {
        return personas.get(idPersona);
    }

 y tendrá una anotación mas

@RequestParam("idPersona"): esta anotación indica que buscaremos un parámetro idPersona en la url es decir que al final nuestra url tendrá un /get?idPersona=1.

La siguiente operación sera POST, que nos permitirá agregar personas  para esto añadimos un método putPersona y lo marcamos con la etiqueta @PostMapping("/post") el metodo se vera así

@PostMapping("/post")
   public Persona postPersona(@RequestBody Persona persona) {
       Random r = new Random();      
       personas.put(r.nextInt(), persona);
       return persona;
   }

y tendrá la ya ya conocida anotación @RequestBody.

Por ultimo tendremos el método Delete, que se encargara de borrar recursos. Para esto añadimos un método deletePersona y lo marcamos con la anotación @DeleteMapping("/delete/{idPersona}")

 @DeleteMapping("/delete/{idPersona}")
   public String deletePersona(@PathVariable int idPersona) {
       try {
          personas.remove(idPersona);
       } catch (Exception e) {
           return "Error";
       }
       return "Listo";
   }

este método tendrá la etiqueta  @PathVariable para indicar en la url el id de la persona a borrar.

Al final tendrás una clase así:

ahora a probar!!!

para esto te sugiero instalar un complemento de google chrome llamado Advanced REST client

Para probar primero desplegaremos nuestra aplicación como se muestra en las siguientes imágenes.




Con la aplicación andando probaremos desde Advanced REST client. Primero un POST

recuerda poner Content-Type: application/json en el contenido para indicar a la aplicación que le vas a enviar contenido en formato JSON

 request
 respuesta
 Ahora un Put

 request
respuesta
Ahora un get
request-respuesta

Ahora un Delete
request
respuesta
Y listo ya tienes los cuatro métodos principales para los servicios RESTful implementados, gracias por leer este tutorial ;).









  

Comentarios

  1. Y de donde se saca el metodo " personas.put(idPersona, persona);" que tienes como clase?, porque no la pusiste

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectarse al LDAP (directorio activo) utilizando JAVA

Un LDAP es un sistema de autenticación estándar utilizado por muchas compañías para controlar el acceso a aplicaciones y recursos. Por lo general se espera que cualquier nueva aplicación haga uso del LDAP para realizar la autenticación y controlar los permisos en forma unificada, la seguridad es transversal a todos los procesos que realiza una organización. Una vez regado el cuento a lo que vinimos, como conectarse a un LDAP. Lo primero que debes saber es que no se requieren librerías adicionales, JAVA en su distribución estandar ya cuenta con todo lo que necesitas. primero tres siglas que tienes que tener en cuanta. CN  = Common Name OU  = Organizational Unit DC  = Domain Component Para conectarse primero necesitas es instanciar un Objeto de la clase LdapContext, este se encargara de manejar la conexión al LDAP y las peticiones que se hagan al mismo. por consiguiente necesitara que le entregues una serie de propiedades de conexión. Esto lo haras con un Map de...

Clases anónimas JAVA (Anonymous Classes)

Código fuente articulo: https://www.dropbox.com/s/pzw44ot0ji2metl/Lambda.zip?dl=0 Las Clases anónimas en JAVA son una solución rápida para implementar una clase que se va utilizar una vez y de forma inmediata. Por ejemplo el  EventHandler  para un botón se puede implementar en la misma asignación valiendonos de la interfaz  EventHandler  que ya esta definida. Pero mejor vamos con un ejemplo mas simple. De la definición anterior concluimos dos cosas la primera es que para crear una clase anónima es necesario haber definido una interfaz, una clase o una clase abstracta. La clase anónima lo que hará sera implementar la interfaz definida o sobre escribir los métodos definidos. Para ilustrar esto utilizaremos el ejemplo del JAVA Tutorial https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html . en este ejemplo tenemos que implementar clases que cumpliendo con la interfaz Saludo sean capaces de saludar en diferentes idiomas. El paso uno ...

Paralelismo en JAVA Executors (ExecutorService, Callables y Futures).

Código fuente articulo: https://www.dropbox.com/s/jci67120hmd0uce/Paralelismo.zip?dl=0 Para manejo de concurrencia Java desde la versión 5 presento el Concurrency API  este presento una mejora substancial en el manejo de hilos y procesos en paralelo, antes solo contabas con Thread y Runnable. lo que te obligaba a controlar la creación y el numero de hilos de ejecución, no te entregaba un resultado del procesamiento y no te dejaba controlar las Excepciones que lanzara un hilo...un hilo se lanzaba y amenos que le enviaras un un CallBack perdías todo contacto con el. Para solucionar este problema se crearon dos tipos de objetos Callables y Futures. estos dos te permiten encapsular una tarea asignándole un tipo de Objeto que sera el valor de retorno y hacer seguimiento a las tareas que ejecuto en paralelo pudiendo preguntar si ya termino, que resultado lanzo y que excepciones ocurrieron. Arranquemos con la implementación de Callable, Callable es una interfaz que te permite de...