docs: readme et script de tests manuels
This commit is contained in:
1 parent
e8a9deb7ad
commit
510bd6613d
2 files changed
+99
-3
No files matched your search
@@ -2,10 +2,20 @@
|
|||||||
|
|
||||||
API REST en PHP natif (POO) pour gérer des liens de vidéos YouTube.
|
API REST en PHP natif (POO) pour gérer des liens de vidéos YouTube.
|
||||||
|
|
||||||
|
- PHP natif uniquement : aucun framework, aucune dépendance, aucun Composer
|
||||||
|
- Stockage SQLite via PDO
|
||||||
|
- À chaque création / modification / suppression, un snapshot complet de la table est écrit dans `data.json`
|
||||||
|
|
||||||
## Prérequis
|
## Prérequis
|
||||||
|
|
||||||
- PHP >= 8.1 avec l'extension `pdo_sqlite` activée
|
- PHP >= 8.1 avec l'extension `pdo_sqlite`
|
||||||
- Aucune dépendance externe, aucun Composer
|
|
||||||
|
Activer l'extension si absente (Debian/Ubuntu) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install php8.5-sqlite3
|
||||||
|
php -m | grep -i sqlite # doit afficher pdo_sqlite et/ou sqlite3
|
||||||
|
```
|
||||||
|
|
||||||
## Lancement
|
## Lancement
|
||||||
|
|
||||||
@@ -13,6 +23,52 @@ API REST en PHP natif (POO) pour gérer des liens de vidéos YouTube.
|
|||||||
php -S localhost:8000 -t public
|
php -S localhost:8000 -t public
|
||||||
```
|
```
|
||||||
|
|
||||||
|
La base `database/api_tube.sqlite` et son schéma sont créés automatiquement au premier appel.
|
||||||
|
|
||||||
## Endpoints
|
## Endpoints
|
||||||
|
|
||||||
À compléter (étapes suivantes).
|
| Méthode | Route | Description | Codes retour |
|
||||||
|
|---------|------------|----------------------------------------|--------------|
|
||||||
|
| GET | `/links` | Lister tous les liens | 200 |
|
||||||
|
| GET | `/links/{id}` | Lire un lien | 200 / 404 |
|
||||||
|
| POST | `/links` | Créer un lien | 201 / 409 / 422 |
|
||||||
|
| PUT | `/links/{id}` | Modifier un lien | 200 / 404 / 409 / 422 |
|
||||||
|
| DELETE | `/links/{id}` | Supprimer un lien | 204 / 404 |
|
||||||
|
|
||||||
|
### Corps attendu (POST / PUT, JSON)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"title": "Titre de la vidéo",
|
||||||
|
"description": "Description",
|
||||||
|
"link_url": "https://youtube.com/watch?v=VIDEO_ID",
|
||||||
|
"thumbnail": "https://img.youtube.com/vi/VIDEO_ID/hqdefault.jpg"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`title` et `link_url` sont obligatoires ; `description` et `thumbnail` sont optionnels. `link_url` doit être une URL valide et unique.
|
||||||
|
|
||||||
|
## Fichier `data.json`
|
||||||
|
|
||||||
|
Régénéré à chaque POST / PUT / DELETE : contient la liste complète des liens, formatée (pretty print).
|
||||||
|
|
||||||
|
## Tests manuels
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash tests/curl.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Arborescence
|
||||||
|
|
||||||
|
```
|
||||||
|
public/
|
||||||
|
index.php # point d'entrée unique
|
||||||
|
.htaccess # réécriture vers index.php
|
||||||
|
src/
|
||||||
|
Database.php # connexion PDO SQLite (+ création du schéma)
|
||||||
|
LinkRepository.php # CRUD SQL
|
||||||
|
JsonExporter.php # écriture de data.json
|
||||||
|
LinkController.php # routage, validation, orchestration
|
||||||
|
database/
|
||||||
|
schema.sql # schéma de la table links
|
||||||
|
```
|
||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BASE_URL="${BASE_URL:-http://localhost:8000}"
|
||||||
|
URL="$BASE_URL/links"
|
||||||
|
|
||||||
|
echo "== POST /links (création) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" -X POST "$URL" \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"title":"Titre vidéo","description":"Description","link_url":"https://youtube.com/watch?v=aaa","thumbnail":"https://img.youtube.com/vi/aaa/default.jpg"}'
|
||||||
|
|
||||||
|
echo "== GET /links (liste) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" "$URL"
|
||||||
|
|
||||||
|
echo "== GET /links/1 (lecture) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" "$URL/1"
|
||||||
|
|
||||||
|
echo "== PUT /links/1 (modification) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" -X PUT "$URL/1" \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"title":"Titre modifié","description":"Nouvelle description","link_url":"https://youtube.com/watch?v=aaa"}'
|
||||||
|
|
||||||
|
echo "== POST /links (URL invalide -> 422) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" -X POST "$URL" \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"title":"X","link_url":"pas-une-url"}'
|
||||||
|
|
||||||
|
echo "== POST /links (URL dupliquée -> 409) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" -X POST "$URL" \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"title":"Doublon","link_url":"https://youtube.com/watch?v=aaa"}'
|
||||||
|
|
||||||
|
echo "== GET /links/999 (introuvable -> 404) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" "$URL/999"
|
||||||
|
|
||||||
|
echo "== DELETE /links/1 (suppression) =="
|
||||||
|
curl -s -w "\n[%{http_code}]\n" -X DELETE "$URL/1"
|
||||||
|
|
||||||
|
echo "== data.json =="
|
||||||
|
cat data.json
|
||||||
Reference in new issue
Block a user