Existen multitud de frameworks para el desarrollo web, y posiblemente hayas oído hablar de Symfony para PHP, Django para Python, ASP.net MVC para plataformas basadas en .NET. Estas herramientas contienen un gran número de características para crear aplicaciones, se basan en convenciones, y existe abundante literatura sobre ellos.
Por otro lado, hay otros que se caracterizan por ser más livianos, de tal manera que contienen un número más reducido de características que sus hermanos mayores y que nos pueden ser útiles para crear soluciones más específicas. En esta serie de artículos haremos una breve introducción a Nancy, un framework para aplicaciones web escrito en C#.
¿Por qué Nancy?
Una de las cosas que más me ha llamado la atención es que está inspirado en Sinatra, un DSL (Lenguaje específico de dominio) escrito en Ruby. Además, como la mayoría de frameworks, es Open Source, lo que nos permite ver bajo el capó e intentar aprender cómo sucede la «magia».
Sinatra es bastante conocido en la comunidad Ruby, y ha servido de ejemplo para otros, aparte de Nancy. Uno de los libros más interesantes y sencillos es Sinatra up and running. de Alan Harris y Konstantin Haase, este último miembro del equipo que da mantenimiento a Sinatra. Ellos han permitido amablemente que pueda portar los ejemplos del mismo de ruby a C#, y veremos algunos a lo largo de esta serie, que cubren temas como el ya clásico «Hola mundo», el uso de rutas, plantillas, viewengines, cookies y errores entre otras. El código de los ejemplos está disponible en github.
Instalación
Para instalar Nancy necesitamos Visual Studio 2010+ con nuget, o bien Xamarin Studio/Monodevelop 4.1+. Para el ejemplo crearemos un sitio web ASP.net vacío. Una vez creado, y usando nuget podemos usar el siguiente comando:
Install-Package Nancy
Esto agregará las dependencias de Nancy en nuestro proyecto. Un último detalle que necesitamos antes de poder empezar a escribir código, es editar nuestro fichero web.config para que tenga este aspecto:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <httpHandlers> <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" /> </httpHandlers> <compilation> <assemblies /> </compilation> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" /> </handlers> </system.webServer> </configuration>
Una vez tengamos esta configuración inicial, podemos escribir nuestro «Hola mundo». En el código que se muestra a continuación, dentro del constructor definimos una ruta, así como el verbo HTTP que usaremos para la misma, y el resultado que devolveremos.
using System; namespace NancyFxSinatra { public class SampleModule : Nancy.NancyModule { public SampleModule() { Get["/"] = _ => "Hello World!"; } } }
Si compilamos y ejecutamos nuestro módulo (F5 en Visual Studio y cmd + Enter en Xamarin Studio) veremos algo así:
Puede que no parezca gran cosa, pero en pocas líneas hemos definido un módulo, y nos hemos asociado a una ruta específica con un verbo concreto. Si por ejemplo intentásemos hacer una petición a otra ruta tendríamos este divertido mensaje 404.
Este es un ejemplo muy sencillo (y poco útil) de lo que se puede hacer. Podemos usar parámetros como parte de la ruta, lo cual nos da un poco más de juego, por ejemplo si al constructor anterior agregamos la siguiente línea:
Get ["/hola/{name}"] = _ => "Hola " + _.name;
Entonces la aplicación reconocerá también /name/nombre, siendo nombre cualquier texto. Con esto podemos ya diseñar una pequeña API REST, ya que tenemos, por una parte, soporte para verbos HTTP, rutas específicas, e indicadores de recursos.
En el próximo artículo veremos además cómo pasar (y procesar) argumentos vía Post, y cómo devolver errores específicos al navegador, entre otras cosas.
Happy hacking!
2 opiniones en “Primer contacto con NancyFX: Desarrollo web ligero con C#”