forked from monnerat/web_2025
110 lines
2.3 KiB
Markdown
110 lines
2.3 KiB
Markdown
# 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
|
|
<?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.
|
|
|
|
|
|
|
|
|
|
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.
|
|
4. Connectez votre api à l'application [todo](./src/todo-riot). Il faut
|
|
complétez le fichier api.js. Prenez soin de modifier le fichier `htaccess`.
|