93 lines
2.8 KiB
Markdown
93 lines
2.8 KiB
Markdown
# api-tube
|
|
|
|
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
|
|
|
|
- PHP >= 8.1 avec l'extension `pdo_sqlite`
|
|
|
|
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
|
|
|
|
```bash
|
|
php -S localhost:8000 -t public
|
|
```
|
|
|
|
La base `database/api_tube.sqlite` et son schéma sont créés automatiquement au premier appel (via les migrations).
|
|
|
|
## Migrations
|
|
|
|
Les migrations sont des fichiers SQL numérotés dans `database/migrations/`, appliqués une seule fois et tracés dans la table `migrations`.
|
|
|
|
Elles sont exécutées automatiquement à la connexion à la base. Pour les appliquer manuellement (hors serveur web) :
|
|
|
|
```bash
|
|
php database/migrate.php
|
|
```
|
|
|
|
Ajouter une migration :
|
|
|
|
```bash
|
|
# fichier database/migrations/002_ajout_colonne.sql
|
|
echo "ALTER TABLE links ADD COLUMN visible INTEGER DEFAULT 1;" > database/migrations/002_ajout_colonne.sql
|
|
php database/migrate.php
|
|
```
|
|
|
|
## Endpoints
|
|
|
|
| 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 + exécution des migrations
|
|
LinkRepository.php # CRUD SQL
|
|
JsonExporter.php # écriture de data.json
|
|
LinkController.php # routage, validation, orchestration
|
|
database/
|
|
migrate.php # runner de migrations (CLI)
|
|
migrations/ # fichiers SQL versionnés
|
|
``` |