# 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 ```