# TP : Une api rest pour la todo list. Le but de l'exercice est d'écrire une api de données restful pour l'application todolist du [tp2](../tp2mvc) ou [tp5](../tp5). Les routes de notre api : ``` get /todo/(:id) post /todo delete /todo/:id put /todo/:id ``` - Pour routage et les entrées/sorties http, on utilise [flight php](https://flightphp.com/). - Pour les entrées/sorties avec la base données, je vous donne un son utilise l'orm [readbean php](https://www.redbeanphp.com/index.php). Copiez le fichier `.htaccess` à la racine de vos sources pour activer la réécriture d'urls. ```apache Require method GET POST PUT DELETE OPTIONS RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] ``` Votre api pour l'instant ```php Flight::request()->data->title , "done" => Flight::request()->data->done ]; $id = Todo::create($todo); Flight::response()->header("Location",Flight::request()->url.$id); $todo['id'] = $id; Flight::json($todo,201); } function getTodos($id = null) { $filter = Flight::request()->query->filter ?? "all"; if ($id === null){ switch($filter){ case "done": $todos = Todo::findCompleted(); break; case "active": $todos = Todo::findUnCompleted(); break; default: $todos = Todo::findAll(); } Flight::json( [ "results" => $todos ] ); } else { $todo = Todo::find($id); if ($todo) Flight::json($todo); else Flight::halt(404); } } Flight::start(); ``` Le modèle utilise PDO, en php. Il vous faudra créér une table avec les attributs nécessaires. 1. Complétez le fichier index.php 2. Testez votre api à la ligne de commandes en utilisant `curl`. 3. Connectez votre application todolist avec l'api. Écrivez un module "abstrait" en javascript pour l'interaction avec l'api. Ce module devra pouvoir être changer pour utiliser firebase **sans que l'application cliente ne change**.