[OWIN] Corriendo WEB API en Nodejs con Connect-OWIN

Bien sabemos que iniciativas como la de OWIN llevan ya algún tiempo en otras comunidades, bien sabemos ya cuales son las ventajas y objetivos de OWIN y hasta ahora he escrito uno que otro ejemplo haciendo uso siempre de C# / .NET.

En este articulo veremos como conectar Microsoft ASP.NET Web API a Node JS haciendo uso del paquete Connect-OWIN, que en si, es una implementación de connect al estándar de OWIN.

Este paquete hace hacia parte de un proyecto más grande, nada más y nada menos que del Edge.js (específicamente del edge-connect) de Tomasz Janczuk, cuyo objetivo no es otro que el de conectar .NET y nodejs 🙂

El código de esta entrada esta en este repo, junto con un ejemplo con NancyFX y SignalR.

Echemos un vistazo, una vez instalamos los paquetes que necesitamos (realmente necesitamos dos, el paquete connect solo lo empleamos para usar el middleware logger) veremos la dependencia entre el connect-owin y edgejs

image

¿Y para que quiere hacer uso del Edgejs? pues basta con echar un vistazo a la carpeta lib/Clr ¡Oh sorpresa! un par de .dll’s entre ellas la querida Owin.dll. Y si vemos el código del connect-owin veremos lo que era de esperarse, el edge = require(‘edge’), y entre otras la construcción del enviaroment  y demás (No seas flojo! échale un ojo! que solo son 160 líneas).

El otro paquete es el de express, podemos pasar de este, pero la construcción será un poco engorrosa.

Todo el código que necesitamos entonces es este:

var owin = require('connect-owin'),
    connect = require('connect'),
    express = require('express');
var app = express();
app.use(connect.logger('dev'));
app.all('/api/*', owin(__dirname + '\\bin\\Debug\\Samples.WebApi.dll'));
app.use(express.static('Site'));
app.listen(3100);

Viendo el código un poco en detalle vemos mucho de express aquí, el app.use espera el middleware (un function) del logger de connect. El express.static hace parte de connect. Finalmente, la línea más gorda, el app.all(…), esta función mapeará todos los request hechos al path definido como primer parámetro al middleware devuelto por el connect-owin :o, y aquí esta la magia del edgejs… no es de gratis que el parámetro de la función owin sea el path del .dll de nuestro site 😉

Algo que me pareció hermoso es que no se dejaron cerradas las puertas solo al uso del IAppBuilder que KATANA resuelve tan fácil y mágico, sino que podemos hacer uso de la interfaz de interacción que tanto nos gusta… ¿Y como luce esto?

Conectando Simple.Web a Nodejs  con FIX

De seguro lo esperabas (me encanta FIX!) así que vamos a pegar Simple.Web al nodejs haciendo uso de FIX.

En un .dll que he llamado TestFix (tremenda creatividad) he agregado una clase con el nombre FixConfig con un único método llamado Invoke, así:

    public class FixConfig
    {
        public Task Invoke(IDictionary<string, object> env)
        {
            var app = new Fixer().Use(Application.Run).Build();
            return app(env);
        }
    }

Y una clasecita para que pinte algo en pantalla:

    [UriTemplate("/")]
    public class Index : IGet, IOutput<RawHtml>
    {
        public Status Get()
        {
            return 200;
        }

        public RawHtml Output
        {
            get { return "<h1>¡Hola mundo!</h1>"; }
        }
    }

Y finalmente, el JavaScript:

var owin = require('connect-owin'),
    express = require('express');
var app = express();
app.all('/node', function (req, res) {
    res.send(200, 'Hello from JavaScript! Time on server ' + new Date());
});
app.all('/', owin({
    assemblyFile: __dirname + '\\bin\\Debug\\FixTest.dll',
    typeName: 'FixTest.FixConfig',
    methodName: 'Invoke'
}));
app.listen(3200);

Como vemos aquí hice uso del custom type and method name que por fortuna incluyó el autor a la función y que me permite emplear clases y métodos con los nombres que yo desee. Luego será llamado mi Invoke al que se le pasará la información de entorno que llenó el connect-owin y empleará Fix para unirlos 🙂

Como resultado podemos ver los request:

image

Conclusión

Abstracción del servidor con OWIN… ¡¡rules!!!

Espero les sea de utilidad.

Hasta el próximo post.

Anuncios
[OWIN] Corriendo WEB API en Nodejs con Connect-OWIN

Un comentario en “[OWIN] Corriendo WEB API en Nodejs con Connect-OWIN

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