Servicio Rest Básico I - Servidor

En la linea de una entrada sobre la creación de un servicio SOAP básico vamos a levantar un servicio REST con el mínimo código,  tampoco en esta ocasión  requeriremos un contenedor web.
Utilizaremos el mismo entorno que para crear el servidor SOAP, jdk8, maven, eclipse, etc, etc..
Al tajo:
Necesitamos las librerias de jersey, la implementación oficial: se las añadimos al pom:
 <dependency>
   <groupId>org.glassfish.jersey.containers</groupId>
   <artifactId>jersey-container-simple-http</artifactId>
   <version>2.22.1</version>
  </dependency>
Existen varias opciones posibles para levantarlo, este es una de ellas. Al final el enlace de descarga con el proyecto completo y otra opción.

La clase que define el servicio:
 package es.sinjava.restserver;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
@Path("/hello")
public class GuayService {
 @GET
 @Path("/{param}")
 public Response getHello(@PathParam("param") String param){
  String output = param.toUpperCase();
  return Response.status(200).entity(output).build();
 }
}

Especificamos la ruta (Path)de la que colgará el servicio y directamente sobre el path del método GET el parámetro. Esto nos crea url de servicio de tipo "/hello/PARAMETRO".

La clase que levanta el servidor:
 package es.sinjava.restserver;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.simple.SimpleContainerFactory;
import org.glassfish.jersey.simple.SimpleServer;
public class App {
 public static void main(String[] args) {
  URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
  ResourceConfig config = new ResourceConfig(GuayService.class);
  SimpleServer server = SimpleContainerFactory.create(baseUri, config);
  System.out.println("Listening on port : " + server.getPort());
 }
}
Creamos una URI con una dirección local en un puerto, Creamos una configuración con el servicio antes creado. Finalmente creamos un servidor que escuche en la uri indicada publicando la configuración. Creo que solo Spring boot es capaz de hacer algo con menos código (pero algo más de configuración.... y es discutible. :-))

Y ya está todo . :-)  Lanzas el main y puedes probar desde tu navegador favorito. Pruebas  a hacer una petición rest contra tu servicio en la URL :
http://localhost:9998/hello/Andres
Te devolverá el nombre en mayúsculas. En el ejemplo "Andres" es el parámetro.

El proyecto completo para descarga está aquí.
Contiene una pequeña variación  sobre lo expuesto y, por si tuviera algo de interés, la configuración de maven para crear un jar con las librerías necesarias.

¿Próxima entrada? Consumidor del servicio rest ahora creado.

Si la creación de un servicio SOAP básico en la entrada anterior era un ejercicio casi académico. Esta tiene algo más de interés practico por el hecho de que no hace falta meter ni muchas librerías para hacer algo funcional y no dejan de ser 8 líneas de código y 6 de configuración.

Comentarios