From 510bd6613dc5281b716be805096be561d12556a0 Mon Sep 17 00:00:00 2001 From: gilles Date: Mon, 14 Sep 2026 14:47:16 +0200 Subject: [PATCH] docs: readme et script de tests manuels --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++--- tests/curl.sh | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 3 deletions(-) create mode 100755 tests/curl.sh diff --git a/README.md b/README.md index c9ac636..b047ff2 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,20 @@ 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` activée -- Aucune dépendance externe, aucun Composer +- 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 @@ -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 ``` +La base `database/api_tube.sqlite` et son schéma sont créés automatiquement au premier appel. + ## 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 +``` \ No newline at end of file diff --git a/tests/curl.sh b/tests/curl.sh new file mode 100755 index 0000000..ba5c0f8 --- /dev/null +++ b/tests/curl.sh @@ -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 \ No newline at end of file