title: Cours IUT : Frameworks Web
slug: cours-iut-frameworks-web
date: 2015-02-16
chapo: C’est le moment où j’ai envie d’écrire mon propre framework.

> By now, the purpose of web frameworks should be clear: to hide the boilerplate and infrastructural code related to handling `HTTP` requests and responses. Just *how much* is hidden depends on the framework. Django and Flask represent two extremes. Django includes something for every situation, almost to its detriment. Flask bills itself as a "micro-framework" and handles the bare minimum of web application functionality, relying on third-party packages to do some of the less common web framework tasks.
>
> Remember, though, that at the end of the day, Python web frameworks all work the same way: they receive `HTTP` requests, dispatch code that generates HTML, and creates an `HTTP` response with that content. In fact, *all* major server-side frameworks work in this way (excluding JavaScript frameworks). Hopefully, you're now equipped to choose between frameworks as you understand their purpose.
>
> <cite>*[What is a Web Framework?](http://www.jeffknupp.com/blog/2014/03/03/what-is-a-web-framework/)* ([cache](/david/cache/0d60b959f92d466e54c001a78b329e2b/))</cite>

Ce cours était une introduction aux frameworks web. Au départ on devait faire du `PHP` en essayant [Laravel](http://laravel.com/)  mais quand j’ai vu la complexité qu’il y avait dans ce framework (générer un projet de test c’est 18 Mo ?!) et le manque de documentation j’ai vraiment douté. Du coup on a commencé par (re)voir les bases avec les concepts (*routing*, *controllers*, *models*, *ORM*, *views*, *templating*, *middlewares*, etc)	avant d’opter pour un framework JavaScript : [SailsJS](http://sailsjs.org/). Qui demandait l’installation de [NodeJS](http://nodejs.org/) ainsi que ses *multiples* dépendances. Autant dire qu’en environnement hostile (connexion plus que limitée) il est compliqué d’arriver à la première ligne de code pour tous…

Une fois les quelques machines coopérantes partagées, on a pu plonger dans le code et essayer de comprendre comment faire des choses simples à partir du gabarit de projet. Or l’exemple proposé ne sert qu’une page statique par défaut ! Il faut parcourir l’énorme arborescence générée pour trouver où placer les fichiers pour les *controllers* ou les *templates* ce qui est n’est vraiment pas intuitif pour un débutant qui essaye de comprendre les concepts sous-jacents. SailsJS nous aura au moins permis de discuter de la dualité *framework front-end/back-end* et de l’importance des données et des URLs en allant même vers du [offline-first](http://hood.ie/blog/say-hello-to-offline-first.html) ([cache](/david/cache/32bfd094aa8514985578ea493c6c3aea/)). Au final j’aurais mieux fait de partir sur [ExpressJS](http://expressjs.com/) ou [Flask](http://flask.pocoo.org/). Cela ne résout pas le problème des dépendances pour autant.

**C’est le moment où j’ai envie d’écrire mon propre framework.** Portable. Copiable. Documenté. Hackable. *Simple.* Un générateur de sites statiques en somme :-p. L’enseignement est vraiment en train de m’ouvrir les yeux sur la complexité inutile créée par nos métiers. Complexité qui re-crée une pyramide de pouvoir et donc de contrôle. [Au même titre que l’énergie](/david/stream/2015/02/17/).
