REST - Representational State Transfer
Framework Ruby on Rails
Ruby on Rails
Ruby on Rails est un framework, basé sur le langage Ruby, qui permet de développer des applications Web selon le modèle de conception Modèle-Vue-Contrôleur (MVC).
Ruby est un langage interprété et orienté objet.
Rails repose sur le principe qu’il faut suivre des conventions établies plutôt que de donner des détails de configuration. Rails propose des comportements par défaut pour la plupart de ses fonctionnalités et donc un moyen d'accomplir une variété de tâches communes.
A partir de la version 2.0, Rails intègre complètement les principes d’architecture REST et fournit des outils pour construire une architecture MVC :
Les modèles sont les classes assurant la gestion des données. Les ressources sont généralement dans une base de données.
Les vues déterminent comment sont affichées les informations à l'utilisateur. Il s’agit de déterminer quelle sera la représentation pour une ressource. En général il s’agit d’une combinaison de HTML et de Ruby.
Les contrôleurs réagissent aux requêtes utilisateur et répondent généralement à l'aide des vues. Rails permet de créer rapidement des squelettes de contrôleurs qui assurent des opérations courantes sur le modèle comme l'ajout, la modification et la suppression d'enregistrements. Il s’agit donc de mettre en œuvre les actions qui appartiennent à une interface commune pour manipuler les ressources.
Exemple
Dans l’exemple suivant on verra comment manipuler une collection de livre.
On va tout d’abord créer un modèle de livre avec seulement deux attributs : un titre et une description. Cela consiste à créer une table Book dans la base de données avec les colonnes title et description
CreateBooks < ActiveRecord::Migration def self.up create_table :books do |t| t.column :title, :string, :limit => 30, :null => false t.column :description, :text end end def self.down drop_table :books end end
Quand une requête HTTP arrive, Rails analyse l'URI demandé et redirige la requête vers la classe du contrôleur approprié.
Pour traiter ces demandes Rails nous permet de créer le contrôleur pour notre modèle et tout particulièrement Rails défini 6 méthodes standards pour ce contrôleur. BooksController.rb permet donc de gérer des requêtes pour les méthodes suivantes :
- GET /books : une liste de livres. Rails appelle la méthode BooksController#index
- GET /books/new : Fournit un formulaire pour créer un nouveau livre. Rails retourne une vue/représentation pour indiquer au client quelle requête http il doit faire pour créer le livre.
- POST /books : pour créer le livre. Rails appelle la méthode BooksController#create
- GET /books/{id} : pour afficher un livre, la méthode BooksController#show
- GET /books/{id}; edit : Renvoie un formulaire pour modifier un livre.
- PUT /books/{id} : Modifie le livre. La méthode appelée est BooksController#update pour changer l’état du livre ou bien BooksController#delete pour le supprimer.
Par correspondance on accède aux ressources à partir des URI suivantes :
- /books/ : Pour obtenir la liste des livres existants
- /books/{id} : Un livre identifié par un ID
- /books/new
- /show/1
- /edit/1
- /destroy/1
Il est aussi possible de définir les méthodes à appeler pour gérer les différentes représentations demandées pour une ressource :
respond_to do |format| format.html { render :template => 'books/show' } format.xml { render :xml => books.to_xml } format.png { render :text => books.generate_image, :content_type => "image/" } end
À partir de l’URI /books/ on peut observer notre collection au format XML après avoir inséré un seul livre :
<?xml version="1.0" encoding="UTF-8"?> <books> <title>Books</title> <book> <id>1</id> <title>a title</title> <link href="http://localhost:3000/books/1"/> </book> </books>
Pour consulter le livre on obtient la réponse suivante :
<?xml version="1.0" encoding="UTF-8"?> <book> <title>a title</title> <id type="integer">1</id> <description>a description</description> </book>