Criando Aplicações RestFull com NancyFx

1 ago

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

Nancy1

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

Nancy2

 

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

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *