Développer une application web en quelques minutes (+démo)

Après avoir développé des tas d’applications web, il y avait une contrainte qui revenait souvent, celle de devoir créer à chaque fois un serveur web avec sa base de données et de réunir le tout via une API REST.

Une perte de temps quand on veut juste se concentrer sur l’application web avec Backbone.js.

Le problème

Ça prend du temps de créer son serveur web avec une API correspondante à son projet. Par exemple avec Express.js et MongoDB, il faut d’abord créer un serveur avec express.js, faire la connexion mongo, puis relier les méthodes MongoDB à votre API, sans compter le système de recherche…

Tout ce que je voulais, c’était avoir un mini projet que je pourrais cloner à chaque fois que je voudrais développer une application web avec comme caractéristiques :

  • un dossier public/ où je mettrais tout mon code et qui sera accessible depuis l’adresse du serveur (exemple : un fichier public/test.js pourra être accessible depuis http://localhost:4000/test.js)
  • aucunes dépendances de base de données externes
  • simple d’utilisation (node app.js pour lancer le serveur, pas plus)
  • une API REST complément libre, pour que je puisse appeler n’importe quel type de route tant qu’elle respecte le schéma CRUD et avec n’importe quel type de schéma à l’intérieur.

Exemple : pour créer un nouveau produit, je vais directement appeller la route /produits en POST avec comme body :

{ "name": "iPhone 4" }

Mon serveur va automatiquement créer la collection « produits » si elle n’existait pas déjà et lui ajouter un nouveau produit dont le nom est « iPhone 4″.

La solution : API-as-a-service

Et bien figurez vous que je viens de sortir ce projet, et il se nomme api-as-a-service et il est  disponible ici sur GitHub.

Comment ça marche ?

Voici les méthodes de l’API que vous fourni le serveur d’api-as-à-service :

POST – /api/:entity

  • Créé un nouveau document pour cette entité, si l’entité (:entity) n’existe pas, alors elle sera créée, le champs id est automatiquement ajouté au document

GET /api/:entity

  • Recherche un document pour cette entité
  • Quelques paramètres de recherche :
    • q pour rechercher dans tous les champs (exemple: /api/products?q=iphone pour chercher dans tous les documents et tous les champs contenant « iphone »)
    • {fieldName} pour rechercher avec le nom d’un champs (exemple: /api/products?name=test pour rechercher les produits dont le terme « test » est contenu dans la clé « name »)
    • fields pour récupérer seulement certains champs (exemple: /api/products?fields=name,price.retail renverra tous les documents avec seulement la clé « name » et « price » (qui sera contenu dans le hash « price »)), chaque clé imbriqué doit être séparé par un point
    • limit pour limiter le nombre de résultats (exemple: /api/products?limit=20)
    • offset pour spécifié à partir de quelle occurrence on commence à renvoyer les résultats (example: /api/products?offset=5 nous renverra les produits à partir du 5 ème)

PUT /api/:entity/:id

  • Met à jour le document possédant l’id :id pour l’entité :entity

DELETE /api/:entity/:id

  • Supprime le document avec l’id :id pour l’entité :entity

DELETE /api/:entity

  • Demande un « token » pour supprimer l’entité :entity ainsi que tous ses documents.
    • Renvoie l’url pour confirmer la suppression de l’entité

DELETE /api/:entity/:token

  • Supprime définitivement l’entité :entity

Installation

On va donc commencer par cloner le repository api-as-a-service, placez vous où vous voulez et faites :

git clone git://github.com/Atinux/api-as-a-service.git

On va installer maintenant les dépendances du projet, ça va aller vite, il n’y a qu’expressJS, rendez vous dans le dossier api-as-a-service/ avec la console et faites :

npm install -d

C’est bon on a fini, notre serveur est prêt à être lancé, il nous reste juste à faire :

node app.js

Vous pouvez maintenant vous rendre sur http://localhost:4000/ et vous allez voir  quelque chose comme :

C’est bon, votre API est prête, il vous reste maintenant qu’à coder votre application web dans le dossier public/ !

La démo ! La démo ! La démo !


Comme vous pouvez le voir, on peut ajouter, éditer, supprimer et rechercher des librairies.

À chaque fois on va contacter l’api distante http://api-as-a-service.jit.su qui est tout simplement le projet api-as-a-service que je vous ai présenté qui tourne sur les serveur de Nodejitsu.

Amusez-vous bien :)

Merci à Alexandre Fournel pour m’avoir inspiré à développer ce projet.

8 réflexions au sujet de « Développer une application web en quelques minutes (+démo) »

  1. toh

    Merci, excellente idée, mettre en place un backend c’est toujours le truc qui me décourage le plus avant de me lancer dans un nouveau projet. Surtout quand il y a beaucoup de front et qu’on aime ça …la back c’est relou.

    Répondre
  2. Sébastien Chopin Auteur de l’article

    Merci :)

    Non je ne connaissais pas le module de Mark Cavage, mais d’après ce que je vois, c’est pour construire une API Rest de la bonne façon.

    Mon projet est plus d’avoir déjà une API de prête et de ne pas s’embêter à la developper.

    Par contre utiliser node-restify pour mon projet api-as-a-service peut être pratique, merci pour l’info :)

    Sébastien

    Répondre
  3. florent

    Dans la documentation de GET /api/:entity, pour le paramètre {fieldname}

    Ce n’est pas la clé « name » et « retail » qui seront récupéré au lieu de « name » et « price» ?

    Répondre
  4. florent

    L’idée est très intéressante. Pouvons nous gérer avec cette solution une api un peu plus complexe ? Par exemple retrouver le dossier n°2 du carton n°12 de la boite n°1

    URI: /boites/1/cartons/12/dossiers/2

    Pouvons nous aussi cumuler la recherche ?
    exemple: /api/products?name=test&category=mini|category=little

    Répondre
    1. Sébastien Chopin Auteur de l’article

      Pour le moment non, mais c’est une très bonne idée et je peux vous conseiller de poster une Issue sur le projet GitHub :)
      Merci pour votre intérêt !

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>