2.3 KiB
2.3 KiB
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.
- Connectez votre api à l'application todo. Il faut
complétez le fichier api.js. Prenez soin de modifier le fichier
htaccess.