Fala galera,
Quando criamos um novo Projeto Web no Visual Studio, provavelmente você deve escolher automaticamente o ASP.NET MVC correto ? Não fique triste, provavelmente 99% que programam em .NET para Web fariam essa escolha. Agora vamos pensar, somente existe ASP.NET MVC para Web ? Será que não existe uma alternativa para .NET na Web além do ASP.NET MVC ? Sim, existe! E o seu nome é NancyFx.
O que é NancyFx ?
NancyFx é um lightweight framework para construção de serviços HTTP Based. Ele foi inspirado em um projeto Ruby chamado Sinatra e é super simples de usar. O NancyFx foi projetado para lidar com requisições HTTP (DELETE, GET, POST, PUT, PATCH, etc) de forma simples e elegante deixando você se concentrar no que é mais importante, sua regra de negócio.
NancyFx é um projeto Open Source criado pela comunidade ou seja você também pode contribuir para melhorar o projeto NancyFX
Vantagens de se usar NancyFx
Testes Faceis – O NancyFx fornece uma biblioteca de testes para que possamos realizar os testes sobre nosso serviço. Assim você pode testar se o seu Request retorna o modelo que você espera e mais com essa biblioteca podemos testar os cabeçalhos da resposta e seus formatos
Injeção de Dependencia – O NancyFx fornece uma Injeção de Dependência automática no qual ele consegue descobrir automaticamente os tipos que são para resolver. Por baixo dos panos o NancyFx utiliza o TinyIoC como container de dependência.
Completamente customizável – Um dos principais recursos do NancyFx é ele ser extensível. Ele é projetado para permitir que você substitua qualquer parte como quiser e aonde quiser. Você pode ter Custom Binder, View Engines, Serializadores e até pode construir seu próprio NancyEngine e mudar a forma como o NancyFx trata as solicitações
Sintaxe clara – O NancyFx oferece uma sintaxe agradável e com menos cerimonia é simples criar serviços HTTP Based e bem claro para quem for dar manutenção no código.
Aplicação de Exemplo com NancyFx
Vamos agora criar nossa aplicação, nesta aplicação iremos criar um TODO App utilizando o NancyFx.
Para se usar o NancyFx, podemos instalar o seu template ou usar o pacote do NancyFx via NuGet. Eu uso uma extensão chamada SideWaffle no qual o principal recurso dele é instalar Templates para criação de Projetos Web.
Escolha a opção Nancy with ASP.NET Host e confirme a operação
Com o projeto criado o NancyFx cria a estrutura necessária para que possamos desenvolver nosso projeto em NancyFx
Bem vindo ao mundo dos Módulos Nancy
No NancyFx o principal conceito é o uso de módulos, esses módulos que são responsáveis por responder nossas requisições de serviços HTTP Based. Vamos criar um novo módulo chamado TodoModule.cs e adicione o código abaixo.
using System; using System.Collections.Generic; using System.Linq; using Nancy; using Nancy.ModelBinding; namespace TodoApp.Modules { public class Todo { public string TaskName { get; set; } public bool IsDone { get; set; } public int TaskId { get; set; } } public class TodoModule : NancyModule { private static List<Todo> TodoList = new List<Todo>(); public TodoModule() { Get["/"] = _ => { return Response.AsJson<List<Todo>>(TodoList, HttpStatusCode.OK); }; Get["/{TaskId:int}"] = args => { return TodoList.Where(x => x.TaskId == args.TaskId); }; Post["/"] = args => { var todo = this.Bind<Todo>(); todo.TaskId = new Random().Next(); TodoList.Add(todo); return HttpStatusCode.OK; }; Delete["/{TaskId}"] = args => { var todo = TodoList.Find(x => x.TaskId == args.TaskId); TodoList.Remove(todo); return HttpStatusCode.OK; }; Put["/{TaskId}"] = args => { var todo = TodoList.Find(x => x.TaskId == args.TaskId); this.BindTo(todo); return HttpStatusCode.OK; }; } } }
Com o código acima estamos criando uma aplicação RestFull utilizando NancyFx e como podemos ver estou conseguindo fazer as requisições normalmente via PostMan
O NancyFx é uma alternativa bem interessante para criarmos aplicações RestFull. Com ele podemos usar como alternativa não somente ao WebApi como também ao MVC. Ele se integra facilmente a ViewEngine como Razor, Super Simple ViewEngine entre outros.
Para saber mais sobre o NancyFx, clique aqui
O código deste projeto se encontra no meu GitHub através deste link
Abs e até a próxima