jueves, 10 de octubre de 2013

Bolg 1 RESTFULL EN JAVA

Después de que estudiamos en Clase con C# la implementación de RESTFull en clase me anime a TRATAR de hacer lo mismo en Java a través del NETBEENS y Glassfish
 

1)      Crearemos un proyecto web común en NetBeans  llamado SimpleRESTweb. Este proyecto hará un simple cálculo de factorial (un típico ejemplo de Entrada, Procesamiento, Salida).









2)      Luego, crearemos una clase normal, llamada FactorialResource. Tendrá un método llamado factorial()

public class FactorialResource {

      public int factorial(int numeroBase) {
           
       if (base >= 1) {
            return factorial(numeroBase - 1) * numeroBase;
        }
        return 1;
    }
}

3)  Agregamos la notación @Stateless al inicio de la clase. Esto convierte automáticamente a nuestra clase en un EJB (visto en Clase)



4)  Al @Stateless le agregamos la anotación @Path("/factorial") Esto indica que el recurso será accedido desde la ruta (URI) "/factorial" por la  web. En ese mismo momento, el NetBeans detectará de que se ha creado un recurso REST, entonces pedirá activar esta característica en la aplicación.

Utilizaremos el dado por defecto (/resources). Clic en Ok.





Y con esto, nuestra clase ya es un recurso REST.




5) Crear un método REST

Solo podemos  crear un método de tipo GET, POST, PUT y DELETE. Y como el método factorial nos deberá devolver un solo valor según el parámetro que le especificamos, usare el tipo GET.



Los valores que se reciben desde el recurso REST deben ser objetos. Por tanto, nuestro método debe cambiar un poco para que no devuelva un int, sino un java.lang.String.

Además, debemos indicar que el parámetro base del método Java factorial será recibido via URL con el nombre numerobase. Es decir, se llamará al URL así

..../factorial?numerobase=5

Usare la notación @QueryParam antes de la declaración del parámetro y ponemos el nombre de la cadena query.

@Stateless
@Path("/factorial")
public class FactorialResource {

    @GET
    public String factorial(@QueryParam("numeroBase") int numeroBase) {

        return Long.toString($factorial(numeroBase));
    }

   int $factorial(int numeroBase) {
        if (numeroBase >= 1) {
            return $factorial(numeroBase - 1) * numeroBase;
        }
        return 1;
    }
}

* Guardamos el proyecto, hacemos clic derecho sobre el ícono de proyecto y seleccionamos "Deploy". Esperamos a que se compile el proyecto, se ejecute el GlassFish y se despliegue.

6) Ahora probaremos el servicio de la forma más simple posible:

Bastará con abrir el navegador y escribir el URL del proyecto:

de ahí saldrá algo como esto:








Donde:

-          SimpleRESTweb:  Generalmente es el nombre del proyecto.
-          resources:  Ubicación de los recursos REST de la aplicación.
-          factorial: Es el nombre de nuestro recurso (Definido por la anotación @Path)
-          numerobase: Es el parámetro del recurso. Justamente es una cadena Query.


ULTIMO

Para consumir desde JavaScript, usa comumente (depues de investigar) la técnica AJAX. Usando algo ya hecho  como el jQuery.

Crearemos una página html al que llamaremos test-jquery.html. Y ahí pondremos lo siguiente.


<html>
    <head>
        <title></title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
        </script>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h2>Calcular factorial</h2>
        Número:<input type="text" name="numerobase" id="numerobase"/>
        <button type="button" id="calcularBtn">Calcular</button>
        <div id="resultadoFactorial">
            Resultado: <span></span>
        </div>
        <script type="text/javascript">
            jQuery("#calcularBtn").click(function(){
                var numerobase = jQuery("#numerobase").val();
                jQuery.get("http://localhost:8080/SimpleRESTweb/resources/factorial",{
                    numerobase:numerobase
                },function(resultadoFactorial){
                    jQuery("#resultadoFactorial span").text(resultadoFactorial)
                })
            })
        </script>
    </body>


</html>

No hay comentarios:

Publicar un comentario