116 lines
3.1 KiB
Markdown
116 lines
3.1 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
|
|
|
|
## 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.
|
|
|
|
## Tests manuels
|
|
|
|
```bash
|
|
bash tests/curl.sh
|
|
```
|
|
|
|
## Docker
|
|
|
|
### Lancement
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
# API accessible sur http://localhost:8000
|
|
```
|
|
|
|
### Arrêter
|
|
|
|
```bash
|
|
docker compose down # conserve la base (volume)
|
|
docker compose down -v # supprime la base (reset complet)
|
|
```
|
|
|
|
### Persistance
|
|
|
|
La base SQLite est stockée dans le Docker volume `db-data` : elle survit aux `down`/`up` successifs. Un `down -v` la supprime ; le prochain démarrage recrée la base via les migrations.
|
|
|
|
### Rebuild après modification du code
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
## 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
|
|
LinkController.php # routage, validation, orchestration
|
|
database/
|
|
migrate.php # runner de migrations (CLI)
|
|
migrations/ # fichiers SQL versionnés
|
|
Dockerfile # image PHP 8.4 Apache + mod_rewrite
|
|
docker-compose.yml # service web + volume db-data
|
|
.dockerignore
|
|
``` |