forked from monnerat/web_2025
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 ou 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.
- Pour les entrées/sorties avec la base données, je vous donne un son utilise l'orm readbean php.
Copiez le fichier .htaccess à la racine de vos sources pour activer la réécriture d'urls.
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
require 'flight/Flight.php';
require 'model/model.php';
Flight::route('GET /todo(/@id)','getTodos');
Flight::route('POST /todo','addTodo');
Flight::route('DELETE /todo/@id','deleteTodo');
Flight::route('PUT /todo/@id','updateTodo');
function deleteTodo($id)
{
// TODO
}
function updateTodo($id)
{
// TODO
}
function addTodo()
{
$todo = [
"title" => 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.
- Complétez le fichier index.php
- Testez votre api à la ligne de commandes en utilisant
curl. - 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.