\n \n \n \n \n Documentation API YGG \n \n \n \n \n
\n
\n

\n 🚀 API YGG \n v1.0.0 \n

\n

Documentation complète de l'API REST Express.js

\n
\n
\n \n \n \n \n \n
\n \n
\n

📖 Introduction

\n \n

\n Bienvenue dans la documentation de l'API YGG ! Cette API RESTful vous permet de gérer les profils utilisateurs, \n les torrents et les commentaires de votre application YGG. \n

\n \n
\n 🔗 URL de base \n \n http://localhost:3000/api \n \n
\n \n

✨ Fonctionnalités

\n \n
\n \n \n
\n

🚀 Démarrage Rapide

\n \n
\n
\n
1
\n

Installer

\n

Installez les dépendances avec npm install

\n
\n
\n
2
\n

Configurer

\n

Créez le fichier .env avec vos paramètres

\n
\n
\n
3
\n

Démarrer

\n

Lancez l'API avec npm run dev

\n
\n
\n
4
\n

Tester

\n

Utilisez les endpoints avec votre client HTTP

\n
\n
\n \n
\n ⚠️ Configuration importante \n Assurez-vous que SECRET_KEY dans votre fichier .env correspond à celui \n de votre application CodeIgniter pour que l'authentification fonctionne correctement. \n
\n \n

Installation

\n
\n
\n Terminal \n \n
\n
cd ygg-api \nnpm install \nnpm run dev
\n
\n
\n \n \n
\n

🔐 Authentification

\n \n

\n L'API utilise JWT (JSON Web Tokens) pour sécuriser les endpoints. \n Vous devez inclure le token dans le header Authorization de vos requêtes. \n

\n \n

Obtenir un token

\n \n
\n
\n POST \n /api/auth/login \n
\n

Connectez-vous pour obtenir un token JWT

\n \n Requête : \n
\n
\n JSON Body \n \n
\n
{ \n "nickname": "votre_pseudo", \n "password": "votre_mot_de_passe" \n}
\n
\n \n Réponse (200) : \n
\n
\n JSON Response \n \n
\n
{ \n "success": true, \n "message": "Connexion réussie", \n "data": { \n "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", \n "user": { \n "id": 123, \n "nickname": "votre_pseudo", \n "rank": 0, \n "email": "email@example.com" \n } \n } \n}
\n
\n
\n \n

Utiliser le token

\n

\n Incluez le token dans le header Authorization de toutes vos requêtes authentifiées : \n

\n \n
\n
\n HTTP Header \n \n
\n
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
\n
\n \n
\n ℹ️ Expiration du token \n Les tokens JWT expirent après 24 heures par défaut. Utilisez l'endpoint \n /api/auth/refresh pour obtenir un nouveau token. \n
\n
\n \n \n
\n

📡 Endpoints

\n \n \n

Authentification

\n \n
\n
\n GET \n /api/auth/me \n 🔒 Auth requise \n
\n

Récupère les informations de l'utilisateur connecté

\n \n
\n
\n cURL \n \n
\n
curl http://localhost:3000/api/auth/me \\ \n -H "Authorization: Bearer VOTRE_TOKEN"
\n
\n
\n \n
\n
\n POST \n /api/auth/refresh \n 🔒 Auth requise \n
\n

Rafraîchit le token JWT

\n
\n \n \n

Profils Utilisateurs

\n \n
\n
\n GET \n /api/users/profile \n 🔒 Auth requise \n
\n

Récupère le profil complet de l'utilisateur connecté avec toutes les statistiques

\n \n Réponse (200) : \n
\n
\n JSON Response \n \n
\n
{ \n "success": true, \n "data": { \n "id": 123, \n "nickname": "pseudo", \n "avatar": "avatar.jpg", \n "rank": 0, \n "rankName": "Utilisateur", \n "stats": { \n "uploaded": 1073741824, \n "uploadedFormatted": "1 GB", \n "downloaded": 536870912, \n "downloadedFormatted": "512 MB", \n "ratio": "2.00", \n "torrentsCount": 10, \n "commentsCount": 25 \n } \n } \n}
\n
\n
\n \n
\n
\n GET \n /api/users/profile/:id \n 📖 Public \n
\n

Récupère le profil public d'un utilisateur par son ID

\n \n Paramètres : \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ParamètreTypeDescription
idnumberID de l'utilisateur
\n \n
\n ℹ️ Note \n Certaines informations sensibles (email, torrent pass) sont masquées pour les profils publics. \n
\n
\n \n
\n
\n PUT \n /api/users/profile \n 🔒 Auth requise \n
\n

Met à jour les informations du profil utilisateur

\n \n Champs modifiables : \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ChampTypeDescription
agenumberÂge de l'utilisateur
genderstring"male" ou "female"
countrystringPays de l'utilisateur
profile_descstringDescription du profil
\n \n
\n
\n JSON Body \n \n
\n
{ \n "age": 26, \n "gender": "male", \n "country": "France", \n "profile_desc": "Ma nouvelle description" \n}
\n
\n
\n \n \n

Torrents

\n \n
\n
\n GET \n /api/users/torrents \n 🔒 Auth requise \n
\n

Liste les torrents uploadés par l'utilisateur connecté

\n \n Query Parameters : \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ParamètreTypePar défautDescription
limitnumber50Nombre de résultats par page
offsetnumber0Décalage pour la pagination
\n \n
\n
\n Exemple \n \n
\n
GET /api/users/torrents?limit=10&offset=0
\n
\n
\n \n
\n
\n GET \n /api/users/torrents/:id \n 📖 Public \n
\n

Liste les torrents uploadés par un utilisateur spécifique

\n
\n \n \n

Commentaires

\n \n
\n
\n GET \n /api/users/comments \n 🔒 Auth requise \n
\n

Liste les commentaires de l'utilisateur connecté

\n \n Query Parameters : \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ParamètreTypePar défautDescription
limitnumber15Nombre de résultats par page
offsetnumber0Décalage pour la pagination
\n
\n \n
\n
\n GET \n /api/users/comments/:id \n 📖 Public \n
\n

Liste les commentaires d'un utilisateur spécifique

\n
\n
\n \n \n
\n

⚠️ Gestion des Erreurs

\n \n

\n L'API retourne des codes HTTP standards et des messages d'erreur au format JSON. \n

\n \n

Codes HTTP

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
CodeSignificationDescription
200OKRequête réussie
400Bad RequestParamètres invalides
401UnauthorizedToken manquant ou invalide
403ForbiddenAccès refusé
404Not FoundRessource non trouvée
429Too Many RequestsRate limit dépassé
500Internal Server ErrorErreur serveur
\n \n

Format de réponse d'erreur

\n
\n
\n JSON Error Response \n \n
\n
{ \n "success": false, \n "message": "Description de l'erreur" \n}
\n
\n \n

Rate Limiting

\n
\n ⚠️ Limite de requêtes \n L'API est limitée à 100 requêtes par 15 minutes par adresse IP. \n Si vous dépassez cette limite, vous recevrez une erreur 429. \n
\n
\n \n \n
\n

💡 Exemples Complets

\n \n

JavaScript / Fetch API

\n
\n
\n JavaScript \n \n
\n
const API_URL = 'http://localhost:3000/api'; \n \n// 1. Connexion \nasync function login(nickname, password) { \n const response = await fetch(`${API_URL}/auth/login`, { \n method: 'POST', \n headers: { 'Content-Type': 'application/json' }, \n body: JSON.stringify({ nickname, password }) \n }); \n \n const data = await response.json(); \n if (data.success) { \n localStorage.setItem('token', data.data.token); \n return data.data.token; \n } \n throw new Error(data.message); \n} \n \n// 2. Récupérer le profil \nasync function getProfile() { \n const token = localStorage.getItem('token'); \n const response = await fetch(`${API_URL}/users/profile`, { \n headers: { 'Authorization': `Bearer ${token}` } \n }); \n \n return await response.json(); \n} \n \n// 3. Utilisation \n(async () => { \n const token = await login('pseudo', 'password'); \n const profile = await getProfile(); \n console.log(profile); \n})();
\n
\n \n

Python / Requests

\n
\n
\n Python \n \n
\n
import requests \n \nAPI_URL = 'http://localhost:3000/api' \n \n# 1. Connexion \ndef login(nickname, password): \n response = requests.post( \n f'{API_URL}/auth/login', \n json={'nickname': nickname, 'password': password} \n ) \n data = response.json() \n if data['success']: \n return data['data']['token'] \n raise Exception(data['message']) \n \n# 2. Récupérer le profil \ndef get_profile(token): \n response = requests.get( \n f'{API_URL}/users/profile', \n headers={'Authorization': f'Bearer {token}'} \n ) \n return response.json() \n \n# 3. Utilisation \ntoken = login('pseudo', 'password') \nprofile = get_profile(token) \nprint(profile)
\n
\n \n

cURL

\n
\n
\n Shell \n \n
\n
# 1. Connexion \ncurl -X POST http://localhost:3000/api/auth/login \\ \n -H "Content-Type: application/json" \\ \n -d '{"nickname":"pseudo","password":"password"}' \n \n# 2. Récupérer le profil (remplacez TOKEN) \ncurl http://localhost:3000/api/users/profile \\ \n -H "Authorization: Bearer TOKEN" \n \n# 3. Mettre à jour le profil \ncurl -X PUT http://localhost:3000/api/users/profile \\ \n -H "Authorization: Bearer TOKEN" \\ \n -H "Content-Type: application/json" \\ \n -d '{"age":26,"country":"France"}'
\n
\n \n
\n ✅ Testez avec Postman \n Importez le fichier YGG_API.postman_collection.json dans Postman \n pour tester facilement tous les endpoints ! \n
\n
\n
\n \n \n \n \n \n \n \n \n