Windows Azure Mobile Services Custom API, El inicio

Ya hace algún tiempo desde que Scott Guthrie anunció actualizaciones para Windows Azure Mobile Services, estas actualizaciones incluían entre otras, la  posibilidad de crear Apis que nos permitieran extender ese concepto tan CRUD que se tenía en un inicio y el poder de emplear GIT como nuestro VCS. Temas que veremos en detalle mas adelante.

En esta serie de artículos relataré mi experiencia desarrollando mi primer api en este servicio, haciendo uso de nodejs. El ejemplo será “real”, pues trataré de mover una vieja aplicación que tengo para los foros de MSDN/TechNet en español, que hace todo el consumo de datos de un RSS y posterior procesamiento directamente desde el dispositivo a un api hospedada en Windows Azure.

¿Que es una Custom Api?

Cuando se lazaron los Windows Azure Mobile Services solo teníamos la posibilidad de personalizar archivos de script que enlazan verbos HTTP con acciones CRUD. Un enfoque que resulta muy rígido para muchos escenarios de desarrollo de back-end. Ahora tenemos la posibilidad de crear un endpoint para nuestros servicios móviles que respondan a métodos HTTP, permitiéndonos hacer algo mas que operaciones contra un almacén de datos de forma mas flexible. Las custom API para los servicios móviles de windows azure nos da una nueva posibilidad de realizar desarrollos mas robustos, con servicios que puedan responder a esos escenarios que antes no podíamos haciendo uso de javascript, nodejs, expressjs y cualquier paquete que lleguemos a necesitar.

¿Por donde empiezo?

En el articulo de Scott Guthrie hay ya unas capturas de pantalla del proceso de creación de un API desde el portal de administración de Windows Azure, así que obviare esta sección y me enfocaré en explicar lo que vemos una vez este proceso se ha completado.

Cuando se termina la creación del API veremos algo como:

image 

Si accedemos a la url del endpoint en nuestro servicio y con los permisos correctos (En el tab de permisos) podemos interactuar con nuestra api.

Viendo el código en pantalla y a pesar que vemos que el código funciona ya empiezan a surgir dudas… como por ejemplo… que es ese exports?

Nodejs Module Exports

Así a grandes rasgos y aun con el riesgo de equivocarme, en node, las variables, funciones, clases y demás NO SON visibles entre archivos. Cada Api que creamos es un modulo de Node que tendrá uno o mas exports correspondientes a un método de Http. Resulta muy similar al enfoque que traía ya los mobile services y que ya había juzgado como “rígidos” y que nos impiden entre otras, la posibilidad de definir rutas mas claras para nuestros recursos… así todo va como muy igual hasta que nos encontramos en la documentación con que se esta haciendo uso de express.js  :o.

Custom API Routing

Apenas inicié con mi pequeño desarrollo me estrellé con la necesidad de responder a una URL como /api/forums/{id}/threads/{id}/ que pese a que se pude emplear query string y trabajar con el objeto request para obtener sus valores no me parece la solución ideal.

Ya he dicho antes que estas custom api emplean el framework de EXPRESS.JS, esto en si es una gran ventaja, aunque me genera la inquietud de no saber si es posible cambiar de framework o si por el contrario es una implementación rígida y debemos acogernos a esta; pero por otro lado, el que Microsoft la escogiera puede hacernos ver que es un Framework maduro que trabajará muy bien para nuestros propósitos.

En la documentación de express js en la sección de routing se explica en detalle como usar de distintas formas el app.verb(), que será el método encargado de darnos la funcionalidad de routing. Para usar este routing necesitamos hacer uso de un nuevo export llamado register y le asignaremos una función que tendrá el app.Verb() de express. Algo de la forma:

exports.register = function (app) {
    app.get("/:forumid/:tid", getAnswers);
}

function getAnswers(req, resp){
    var respuesta = {
        foroId: req.params.forumid,
        hiloId: req.params.tid
    };
    resp.send(200, JSON.stringify(respuesta));    
} 

Al hacer la petición /api/blogtest/visualcsharp/123456 se obtiene la respuesta:

image

Esta es la flexibilidad que necesito para poder responder a esas rutas que antes no podía, y que ahora, gracias a esta implementación de expressjs es mucho mas sencillo.

¿Ambiente de desarrollo?

Otra de las noticias que anunció Scott Guthrie en su blog, fue la de la nueva posibilidad de tener GIT como nuestro VCS, podemos trabajar sin ningún problema desde nuestro Linux,  Windows u Osx con el editor que mas nos guste y haciendo uso del npm nos podemos instalar lo que sea que necesitemos. Personalmente, todo lo que era con node lo estaba trabajando en una maquina con Ubuntu, para no llenar de “cosas raras” mi maquina con Windows… pero ahora ya he instalado el nodejs y  el WebMatrix como mi IDE y la verdad es que van de maravilla 🙂

No escribiré como se hace esto pues ya en la MSDN se hizo este completo tutorial, pero si alguien tiene dudas al respecto no dude en comentarlo.

Conclusión

Pese a que Scott Guthrie anunció que se iba a dar la posibilidad de trabajar estas APIs con .NET, esta me ha parecido la excusa perfecta para aprender un poco mas de NodeJs y de JavaScript por fuera del DOM. Además de conocer una nueva herramienta como lo es ExpressJS.

Esta entrada no era mas que una breve introducción y unas muy pocas aclaraciones sobre esta nueva mejora de los Mobile Services de Windows Azure, en las siguientes entradas de esta serie trataré de documentar los distintos escenarios que he visto en esta pequeña implementación.

Hasta el próximo post.

Anuncios
Windows Azure Mobile Services Custom API, El inicio

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s