Faire de l’ASP.NET différemment avec Nancy

Ces dernières années, les développeurs ASP.NET ont connu une série de transformations sur la façon de faire le développement web. Initialement, il y avait ASP.NET Forms. Par la suite est arrivée une séquence de changements qui ont introduit ASP.NET MVC, Razor et dernièrement ASP.NET Web API.

NancyEn coulisses, ces dernières années, ASP.NET s’est ouvert à l’introduction de fonctionnalités communautaires au cadre de développement. D’ailleurs, certains composants au cœur des fonctionnalités d’ASP.NET utilisent des librairies provenant du projet jQuery et il y a même un gabarit de projet proposant l’utilisation Knockout.js. C’est peu dire.

Il est maintenant possible, sans effort, d’y développer de nouvelles fonctionnalités sans utiliser ce qui est d’emblée fourni par .NET. J’ai introduit un exemple de cette philosophie dans mon précédent billet au sujet du standard OWIN.

À plus petite échelle, si vous ne désirez pas utiliser ASP.NET MVC ou Web Forms pour votre projet, sachez qu’il y a des alternatives. L’une de celles-ci est le projet Nancy.

Nancy permet la création de services web en utilisant une syntaxe minimaliste inspirée du projet Sinatra, pour Ruby. Pour donner un exemple, le code suivant permet de router l’accès à la racine de votre site web à une vue qui se nomme « index » :


public class SampleModule : Nancy.NancyModule
{
public SampleModule()
{
Get["/"] = _ => "Hello World!";
}
}

view raw

nancy.cs

hosted with ❤ by GitHub

Assez simple, n’est-ce pas? C’est à partir de cet instant que le plaisir commence, à mon avis.

Lorsque l’on jette un coup d’oeil à NuGet, il s’agit de plus de trente extensions liées directement à Nancy qui peuvent être téléchargées afin de vous aider à construire votre projet.

Un projet de base utilisera uniquement la librairie Nancy ainsi que Nancy.Hosting.Aspnet afin de permettre l’hébergement avec ASP.NET. Ce n’est pas sans raison que j’ai mentionné ce dernier package. Il est possible, par exemple, d’utiliser Nancy.Hosting.Self  afin de créer un service qui s’autohébergera en utilisant HttpListener.

Vous avez compris que les possibilités sont assez vastes. Si vous êtes comme moi, vous allez vouloir certainement vouloir vous en mettre plus sous la dent avec Nancy. À ce sujet, il y a beaucoup de possibilités devant vous, car il y a une multitude de ressources sur la question.

À titre d’exemple, il y a le site http://samples.nancyfx.org/ qui contient quelques exemples de fonctionnalités qui ont été développées en utilisant Nancy. Le code en entier est accessible sur GitHub.

Pour le restant, il s’agit de vouloir expérimenter avec cette librairie qui permet effectivement de faire le développement web avec .NET différemment. Nancy s’insère, à mon avis, très bien dans un contexte de développement de service web léger ou même d’applications ayant un cadre de fonctionnement balisé.

Les liens de la semaine – Édition #52

Développement

Web

.NET

Technologie

Science et autres

  • Il s’avère qu’un cube Rubik peut être résolu en vingt coups ou moins.
  • Est-ce que vous serez en mesure de générer autant d’entropie qu’une machine?

Une brève introduction au standard OWIN et au projet Katana

L’un des points qui fait la force du développement web avec la plateforme .NET est la possibilité d’y ajouter facilement des fonctionnalités. À tous les endroits de la chaîne de livraison de votre site web, il est possible d’y ajouter ou retirer des fonctionnalités pour votre solution.

Avec .NET, la mise en oeuvre de votre application web est rendue possible par deux services œuvrant en synergie : IIS et ASP.NET. À l’image de Batman et Robin, ils se divisent la tâche de vous rendre accessible les différents morceaux de robot qui vous permettent de construire votre site.

Il y a actuellement une tendance qui se dégage dans le domaine, à mon avis. Les développeurs cherchent par tous les moyens de dégraisser le plus possible l’architecture de leurs applications afin d’éviter de s’éparpiller un peu partout.

Avec des technologies comme ASP.NET MVC ainsi que la possibilité d’avoir un rendu côté client assuré par de minuscules librairies JavaScript, nous sommes loin de l’époque où un site pouvait résider sur une poignée de formulaires ASP.NET Forms avec une quantité astronomique de contrôles serveur.

Vous vous souvenez qu’il fallait tenter, le plus possible, de réduire la taille du viewstate afin d’accélérer le chargement d’une page? On en parle comme si c’était une époque lointaine.

OWIN et Katana

Avant tout, il faut savoir que le nom OWIN est l’acronyme d’Open Web Interface.

Ce qu’OWIN vise à accomplir est d’abstraire, à un développeur web .NET, l’utilisation d’IIS et de toutes les fonctionnalités d’ASP.NET pour son application web.

OWIN est un standard qui définit ce qui est nécessaire afin que les différentes requêtes et réponses HTTP soient correctement traitées.

Lorsque vous démarrerez un projet qui sera basé sur OWIN, vous allez pouvoir attendre à certains comportements qui seront explicitement exprimés dans la documentation. La spécification est assez simple et courte à lire. Je vous le recommande fortement.

Tandis qu’OWIN est une spécification, le projet Katana est une implémentation de celle-ci. Il s’agit d’un projet soutenu par Microsoft visant à faciliter l’intégration de librairies et applications compatibles avec OWIN sur la plateforme Windows.

Katana permet d’avoir sous la main un serveur web et quelques librairies vous permettant de construire une application web qui a du sens.

Dans le concret?

À la lecture de ceci, vous avez probablement la même question que j’avais en tête lorsque j’ai initialement lu au sujet d’OWIN. Après tout, si vous êtes un développeur .NET depuis toujours et que vous avez uniquement travaillé avec Windows depuis vos tout débuts, vous devez vous dire que tout ce dont vous avez besoin c’est IIS et ASP.NET.

Le secret que cache OWIN est l’émergence de projets à code ouvert destinés à s’exécuter sur Windows autant que Linux grâce à Mono. Un exemple de cette interopérabilité est le serveur web Kayak.

Avec ce serveur web, vous pouvez construire une application web utilisant la libraire Nancy qui permet le développement de services web à l’instar de Sinatra pour Ruby. En supplément, vous pouvez vous libérer entièrement de Microsoft en utilisant le compilateur Mono et développer un projet à coûts modiques.

Si vous êtes du genre à voir pour y croire, je vous invite à jeter un coup d’oeil au code fourni par cette page afin de vous donner une idée des possibilités qu’offrent OWIN, Kayak, Gate et Nancy.

Sources supplémentaires

Les liens de la semaine – Édition #51

Développement

.NET

Technologie

Web

Science et autres

Une introduction au développement node.js sous Windows

Node.js, aussi appelé simplement Node, est une plateforme de développement permettant l’exécution de JavaScript du côté serveur. La principale spécificité de Node est qu’il utilise un modèle d’exécution asynchrone basé sur les événements. Cette façon de faire le développement est tirée directement du modèle de développement que propose JavaScript.

Ce qui permet à Node.js de vivre du côté serveur est l’engin JavaScript utilisé par Google Chrome, V8. C’est aussi par cette façon que Node.js tient une très grande partie de sa rapidité d’exécution.

À vue d’oiseau, Node offre les avantages suivants :

  • Permets l’exécution du JavaScript du côté serveur (évidemment!)
  • Supporté sur Windows, Linux et les grandes plateformes d’hébergement dans les nuages comme Azure.
  • Possède une communauté forte qui maintient une collection de librairies activement développées sur npm.

Un exemple

Il est possible d’illustrer un exemple de l’exécution événementielle de Node à l’aide du code suivant :


var net = require('net');
var server = net.createServer(function(c) {
console.log('Serveur connecté');
c.on('end', function() {
console.log('Serveur déconnecté');
});
c.write('Hello !\r\n');
c.pipe(c);
});
server.listen(8124, function() {
console.log('Serveur démarré');
});

view raw

node.js

hosted with ❤ by GitHub

Cet exemple de code fait les choses suivantes

  • Écoute sur le port 8124 pour une connexion entrante
  • Lorsque le serveur est initialisé, il sera écrit « Serveur démarré » dans la console.
  • Une fois une connexion entrante faite, il sera écrit « Serveur connecté » dans la console et le client recevra le message « Hello ! »
  • Ensuite, tout ce que le client va taper lui sera immédiatement retourné jusqu’à la fin de la connexion.
  • À la fin de la connexion, il sera écrit « Serveur déconnecté » dans la console.

Installation

La façon la plus simple d’installer Node.js est de passer par Chocolatey. Si vous ne connaissez pas Chocolatey, il s’agit d’un gestionnaire d’application fonctionnant sur le même principe que Nuget pour les développeurs .NET ou apt-get pour les gens issus du monde Linux.

Pour vous donner une idée de ce que Chocolatey peut faire, vous pouvez aller jeter un coup d’oeil au billet que j’ai dédié à Chocolatey, il y a quelques semaines.

Alors donc, l’installation de Node.js se fait par la ligne de commande suivante : cinst nodejs ou cinst nodejs.install.

La première option vous configure Node.js sans passer par le fichier MSI fourni par l’équipe de développement. Cette approche est, comme je dirais, assez au métal. Elle est pratique si vous êtes du genre à tout contrôler ce qui se passe sur votre ordinateur.

L’avenue nodejs.install, vous configurera tout ce que vous avez besoin dans un dossier sous Program Files et ajoutera les raccourcis nécessaires à la variable PATH.

Si vous préférez la première voie, l’exécutable de Node.js sera situé sous C:\Chocolatey\lib\nodejs.commandline.0.10.20\tools. Cependant, un raccourci globalement accessible à partir de la ligne de commande sous C:\Chocolatey\bin.

Dans tous les cas, il vous suffira donc de taper la commande node pour démarrer une instance et démarrer l’exécution de votre application Node.js.

npm

Le développement avec Node.js ne serait pas une expérience entière s’il n’y avait pas la possibilité d’ajouter des fonctionnalités facilement à son projet. Après tout, on ne veut pas réécrire la roue à tous les coups. C’est à ce moment qu’entre en jeu la commande npm. C’est ce qu’il vous permettra de faire la gestion des librairies faisant partie de votre projet en ligne de commande.

D’ailleurs, si vous venez du monde .NET, sachez que npm est basé sur la même idée générale que NuGet.

Avec npm, l’installation d’une librairie se fait à l’aide de la commande npm install. Vous pouvez aussi avoir une idée des librairies qui sont à votre disposition à l’aide du site web de npm.

Et ensuite?

Une fois que Node.js sera installé sur votre ordinateur et que vous savez comment installer des librairies avec l’aide de npm, vous pouvez passer à la partie la plus intéressante. C’est-à-dire de programmer quelque chose avec Node.js.

Les possibilités de développement sont assez vastes avec Node.js. Voici un exemple de ce qui est disponible sur npm :

  • express, un framework de développement web minimaliste. Similaire à Sinatra pour Ruby.
  • Request, pour vous permettre de faire facilement des requêtes HTTP.
  • grunt, permet l’automatisation de certaines tâches reliées au développement web.
  • async, offre 20 fonctions ayant un aspect relié à la programmation fonctionnelle (map, filter, each, etc.).
  • commander, pour faciliter la gestion de votre application en ligne de commande.

Et il y a des centaines d’exemples similaires sur lesquels vous pourriez vous inspirer pour votre projet. Il suffit de laisser aller sa créativité.

Ceci étant dit, ce n’est pas tout. Node.js n’est pas uniquement relié au développement d’applications web et ligne de commande. Il est même possible de faire de la robotique avec un module Arduino. Vous trouverez plus d’informations sur http://nodebots.io/.