foREST - Framework léger d'API RESTful écrit en PHP 5.3

2011-10-22

Je vous présente aujourd'hui foREST, un petit framework d'API RESTful développé par mes soins durant quelques moments d'ennuis. Ce framework utilise les composants YAML et Console du framework Symfony2. Le projet est disponible sur Github, donc n'hésitez pas à participer. Il vous permettra de réaliser des requêtes de type REST (GET, POST, PUT, DELETE), de gérer des utilisateurs et des droits d'accès à certaines ressources ainsi que de gérer des paramètres de différents types (string, integer, ...) fournis dans vos requêtes.

Fichiers de configuration
Les fichiers de configuration utilisent le format YAML et j'ai utilisé le composant Symfony2 afin de parser le YAML dans ce projet. Vous pouvez définir des connections à plusieurs bases de données nommées dans le fichier config/databases.yml comme suit pour la base de données nommée "main" :

main:
  dsn: mysql:host=localhost;dbname=forest
  username: root
  password: root
Les utilisateurs et roles d'accès à votre API peuvent être gérés simplement grâce à l'implémentation du composant Console de Symfony2 : Pour ajouter un utilisateur, utilisez la commande :
php console user:add username password role
Pour supprimer un utilisateur :
php console user:del username
Enfin, il ne faut pas oublier de rafraîchir le fichier .htpasswd avec les nouvelles informations en tapant :
php console user:refresh
Créer une nouvelle ressource
Créer une ressource consiste à créer un répertoire du nom de votre ressource dans le répertoire "resources". Par exemple : "resources/Books" et de créer à l'intérieur les 3 fichiers suivants : routing.yml : contient les routes d'accès à vos API pour cette ressource. Elles sont définies sous la forme suivante :

"get:/books":
  description: "List all books by specified filters"
  resource: ForestResourcesBooks
  action: getBooks
  role: user
queries.yml : contient les requêtes en bases de données, identifiées par une clé comme suit dans cet exemple :

"my.book.query":
  database: main
  query: >
         SELECT * FROM books
Vous pouvez ensuite appeller cette requête dans vos différentes ressources avec :

        return $this->query('my.book.query');
Enfin, il ne vous reste plus qu'à créer la classe PHP de la ressource, qui doit comporter le même nom que le répertoire de la ressource, à savoir "Books.php" dans notre exemple. Ce fichier doit prendre la forme suivante :

/**
 * foREST - a simple RESTful PHP API
 * 
 * @version 1.0
 * @author Vincent Composieux - vincent.composieux@gmail.com
 */

namespace ForestResources;

use ForestCoreRequest,
    ForestCoreResource;

/**
 * Books
 */
class Books extends Resource {
    /**
     * List all books
     * 
     * @param Request $request
     * 
     * @return array
     */
    public function getBooks(Request $request) {
        return $this->query('my.book.query');
    }
Vous êtes maintenant prêt à utiliser l'API ! Je vous invite à me contacter si vous souhaitez plus de détails sur l'utilisation de l'API, des remarques ou encore participer sur Github.

Comments