Chirpy est une API JSON développée en Go et inspirée de plateformes comme Bluesky ou Mastodon. Ce projet utilise des outils minimalistes et intègre des fonctionnalités telles que les middlewares, le routage, la journalisation, les webhooks, l'authentification, l'autorisation, les JWTs et une base de données Postgres.
Ce projet a été réalisé dans le cadre du cours de Boot.dev sur la création d'un serveur HTTP en Go.
-
Clonez le dépôt :
git clone https://github.com/benKapl/chirpy.git cd chirpy -
Construisez le projet :
go build -o chirpy
-
Lancez le serveur :
./chirpy
- Installez Postgres sur votre machine.
- Créez une base de données nommée
chirpy:CREATE DATABASE chirpy;
- Appliquez les schémas SQL situés dans le dossier
sql/schema/pour configurer les tables nécessaires :psql -U <votre_utilisateur> -d chirpy -f sql/schema/001_users.sql psql -U <votre_utilisateur> -d chirpy -f sql/schema/002_chirps.sql psql -U <votre_utilisateur> -d chirpy -f sql/schema/003_users.sql psql -U <votre_utilisateur> -d chirpy -f sql/schema/004_refresh_tokens.sql psql -U <votre_utilisateur> -d chirpy -f sql/schema/005_users.sql
Créez un fichier .env à la racine du projet avec les variables suivantes :
DB_URL=postgres://<utilisateur>:<mot_de_passe>@localhost:5432/chirpy?sslmode=disable
PLATFORM=dev
JWT_SECRET=<chaîne_aléatoire>
POLKA_KEY=f271c81ff7084ee5b99a5091b42d486e- DB_URL : Chaîne de connexion à votre base de données Postgres locale.
- PLATFORM : Définissez sur
dev. - JWT_SECRET : Une chaîne aléatoire utilisée pour valider les tokens JWT.
- POLKA_KEY : Clé pour simuler un fournisseur de paiement. Utilisez
f271c81ff7084ee5b99a5091b42d486epour que cela fonctionne.*
go test ./...Voici la liste des endpoints disponibles et leurs fonctionnalités :
- POST /api/users : Crée un nouvel utilisateur.
- PUT /api/users : Met à jour les informations d'un utilisateur (authentification requise).
- POST /api/login : Authentifie un utilisateur et retourne un token JWT.
- POST /api/refresh : Génère un nouveau token JWT à partir d'un token de rafraîchissement.
- POST /api/revoke : Révoque un token de rafraîchissement.
- GET /api/chirps : Récupère tous les chirps ou ceux d'un utilisateur spécifique.
- Paramètres de requête :
userId(optionnel) : Filtre les chirps par l'ID de l'utilisateur.sort(optionnel) : Définit l'ordre de tri (ascoudesc).
- Paramètres de requête :
- GET /api/chirps/{id} : Récupère un chirp spécifique par son ID.
- POST /api/chirps : Crée un nouveau chirp (authentification requise).
- DELETE /api/chirps/{id} : Supprime un chirp (authentification requise).
- GET /admin/metrics : Affiche les métriques d'utilisation.
- POST /admin/reset : Réinitialise les données (uniquement en environnement
dev).
- POST /api/polka/webhooks : Gère les webhooks pour les événements de mise à niveau utilisateur.
- GET /api/healthz : Vérifie l'état de santé du serveur.
Voici la liste des middlewares utilisés dans le projet :
- middlewareLog : Journalise chaque requête HTTP avec sa méthode et son chemin.
- middlewareMetricsInc : Incrémente un compteur pour suivre les visites des fichiers statiques.
- AuthenticateAccessToken : Vérifie et valide les tokens JWT pour les endpoints nécessitant une authentification.
Chirpy est conçu pour être extensible et facile à utiliser, tout en respectant les bonnes pratiques de développement d'API modernes.