Archive

Posts Tagged ‘quercus’

Servicios Web REST

September 25th, 2009

Me encantan esos días en los que puedes dedicarte a investigar, el hecho de poder leer mucha documentación para encontrar la mejor solución a un problema, sin presiones, sin plazos de entrega…

Para ponernos en situación, tenemos una especie de modelo editorial donde se almacenan cantidades más ó menos importantes de datos, desarrollado en con toda la pesca incluída: , y usando MySQL como BD. Meses atrás se hizo a toda prisa una aplicación web de consulta, en este caso en PHP. Si, se que alguno querrá arrancarse los ojos al leer esto pero: el código de PHP lanza querys directas contra la BD (es decir, se pasa el modelo de ORM de por los santos)… que queréis, se hizo en día y medio, cosas de los plazos.

Por si alguno todavía no se ha dado cuenta, eso tiene un grave problema (dejando de lado que es una chapuza increíble) y es que requiere trasladar todos los cambios que se hagan en el modelo a nuestra aplicación PHP (y normalmente suele pasar que se olvida y falla en el peor momento). A la hora de cambiar esto, se podría optar por utilizar algún tipo de implementación PHP sobre tipo (que ya utilizamos en otra rama), pero viendo los dolores de cabeza que ha dado, prefería evitarlo…

¿Solución? Servicios Web. ¿SOAP? ¡Mucho lio! … Mejor solución: REST (Representational state transfer): una solución de arquitectura “parida” para las necesidades justas que tenemos, y en este caso, limitadas a peticiones GET y algún POST (quizás para las búsquedas…). Ya tenemos nuestra solución: servicios web que den una salida JSON. El motivo de dar una salida es evidente: queremos que sea interpretado por PHP, el cual tiene las funciones específicas para ello, y de esa forma no nos limitamos a ninguna arquitectura (nunca se sabe…).

Ahora viene el lado servidor, tenemos que implementar los servicios web en y sobre todo, tenemos que mantener y aprovechar la arquitectura existente. Ah! Una última cosa… no podemos depender de un contenedor específico, por si acaso ;)

De nuevo, solución: JAX-RS, la solución más sencilla que nos aporta para montar servicios . En este caso hemos utilizado una implementación que se llama Jersey (que queréis que haga si le ponen esos nombres…). Utilizando maven se ha vuelto muy sencillo, unas dependencias por aquí, otras por allá, y todo ready! Aqui os dejo el “getting started” de , si miráis el código os quedaréis muy sorprendidos, al fin y al cabo utiliza POJOs.

 1    // The  class will be hosted at the URI path "/helloworld"
 2    @Path("/helloworld")
 3    public class HelloWorldResource {
 4
 5        // The  method will process HTTP GET requests
 6        @GET
 7        // The  method will produce content identified by the MIME
 8        // type "text/plain"
 9        @Produces("text/plain")
10        public String getClichedMessage() {
11            // Return some cliched textual content
12            return "Hello World";
13        }
14    }

Admito que he estado un par de horas pegándome con un conflicto de versiones de dependencias que tenían e , causados por la librería asm, cosa de tener ya un sistema montado por detrás. Ahora mismo no lo recuerdo exáctamente, pero creo que utilizaba la rama 1.x de asm y la 2.x, algunos métodos han cambiado y… POUM! Las últimas versiones de ya no tienen esa dependencia así que sólo había que incluirla en el ignore de maven para y todo solucionado. ¿Veis? Si hubiese mirado los foros de antes… me hubiese evitado ese tiempo de pelea con el tomcat (si, lo he montado sobre un tomcat, aunque supongo que termine en un resin).

Si alguno monta un servicio con esto, ya me enviará la URL para probarlo (si es público claro ;) )

Agregador Agregador, Tecnología , , , , , , , , ,