Une application API REST Spring Boot complète pour une plateforme de médias sociaux avec des opérations CRUD complètes pour les publications, commentaires et likes.
Il s'agit d'une application Spring Boot prête pour la production construite avec les spécifications suivantes :
- Nom du Package :
com.contoso.socialapp - ID d'Artefact :
socialapp - ID de Groupe :
com.contoso - Type de Package :
jar - Version Java : OpenJDK 21
- Outil de Build : Gradle
- Base de données : SQLite (embarquée)
- Port : 8080
- Spring Boot 3.2.5 : Framework principal
- Spring Web : Points de terminaison API RESTful
- Spring Data JPA : Opérations de base de données
- Spring Boot Actuator : Surveillance d'application
- Spring Boot Validation : Validation d'entrée
- SQLite : Base de données embarquée
- Hibernate Community Dialects : Support SQLite
- Springdoc OpenAPI : Documentation API (Swagger UI)
- Lombok : Réduction du code standard
src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── contoso/
│ │ └── socialapp/
│ │ ├── SocialAppApplication.java # Classe principale de l'application
│ │ ├── config/
│ │ │ ├── WebConfig.java # Configuration CORS
│ │ │ └── OpenApiConfig.java # Configuration Swagger/OpenAPI
│ │ ├── controller/
│ │ │ ├── HealthController.java # Points de terminaison de santé
│ │ │ ├── PostController.java # Gestion des publications
│ │ │ └── CommentController.java # Gestion des commentaires et likes
│ │ ├── model/
│ │ │ ├── Post.java # Entité Publication
│ │ │ ├── Comment.java # Entité Commentaire
│ │ │ ├── Like.java # Entité Like
│ │ │ └── dto/ # Objets de Transfert de Données
│ │ ├── repository/
│ │ │ ├── PostRepository.java # Accès aux données de publication
│ │ │ ├── CommentRepository.java # Accès aux données de commentaire
│ │ │ └── LikeRepository.java # Accès aux données de like
│ │ └── service/
│ │ ├── PostService.java # Logique métier des publications
│ │ └── CommentService.java # Logique métier des commentaires
│ └── resources/
│ ├── application.properties # Configuration de l'application
│ └── data.sql # Données d'exemple (optionnel)
└── test/
└── java/
└── com/
└── contoso/
└── socialapp/
└── SocialAppApplicationTests.java # Tests d'intégration
- ✅ API RESTful complète pour les opérations de médias sociaux
- ✅ Gestion des publications (Créer, Lire, Mettre à jour, Supprimer)
- ✅ Système de commentaires avec opérations CRUD complètes
- ✅ Fonctionnalité Like/Ne plus aimer
- ✅ Base de données SQLite avec JPA/Hibernate
- ✅ Documentation OpenAPI/Swagger
- ✅ CORS activé pour localhost et GitHub Codespaces
- ✅ Configuration d'URL de serveur dynamique
- ✅ Points de terminaison de vérification de santé
- ✅ Intégration Spring Boot Actuator
- ✅ Gestion complète des erreurs
- ✅ Validation d'entrée avec Bean Validation
Référez-vous au document README pour la préparation.
D'abord, définissez la variable d'environnement $REPOSITORY_ROOT.
# bash/zsh
REPOSITORY_ROOT=$(git rev-parse --show-toplevel)# PowerShell
$REPOSITORY_ROOT = git rev-parse --show-toplevelEnsuite, naviguez vers le répertoire java.
cd $REPOSITORY_ROOT/complete/java# Rendre gradlew exécutable (si nécessaire)
chmod +x ./gradlew
# Construire le projet
./gradlew build# Démarrer l'application en utilisant Gradle
./gradlew bootRun
# Alternative : Exécuter le fichier JAR directement
# java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar# Vérifier le point de terminaison de santé
curl http://localhost:8080/api/health
# Réponse attendue : {"status":"healthy"}Ouvrez votre navigateur et naviguez vers :
- Swagger UI : http://localhost:8080/swagger-ui.html
- JSON OpenAPI : http://localhost:8080/v3/api-docs
GET /api/health- Point de terminaison de vérification de santé personnaliséGET /api/welcome- Point de terminaison de message de bienvenue
GET /api/posts- Obtenir toutes les publicationsGET /api/posts/{id}- Obtenir une publication spécifique par IDPOST /api/posts- Créer une nouvelle publicationPATCH /api/posts/{id}- Mettre à jour une publication existanteDELETE /api/posts/{id}- Supprimer une publication
GET /api/posts/{postId}/comments- Obtenir tous les commentaires d'une publicationGET /api/posts/{postId}/comments/{commentId}- Obtenir un commentaire spécifiquePOST /api/posts/{postId}/comments- Ajouter un commentaire à une publicationPATCH /api/posts/{postId}/comments/{commentId}- Mettre à jour un commentaireDELETE /api/posts/{postId}/comments/{commentId}- Supprimer un commentaire
POST /api/posts/{postId}/like- Aimer une publicationDELETE /api/posts/{postId}/like- Ne plus aimer une publication
GET /actuator/health- Indicateur de santé Spring BootGET /actuator/info- Information de l'application
curl -X POST http://localhost:8080/api/posts \
-H "Content-Type: application/json" \
-d '{
"title": "Ma Première Publication",
"content": "Ceci est le contenu de ma première publication !",
"authorName": "Jean Dupont"
}'curl http://localhost:8080/api/postscurl -X POST http://localhost:8080/api/posts/1/comments \
-H "Content-Type: application/json" \
-d '{
"content": "Super publication !",
"authorName": "Marie Martin"
}'curl -X POST http://localhost:8080/api/posts/1/like \
-H "Content-Type: application/json" \
-d '{
"userName": "jean_dupont"
}'- Ouvrez http://localhost:8080/swagger-ui.html
- Explorez les points de terminaison disponibles
- Cliquez sur "Try it out" sur n'importe quel point de terminaison
- Remplissez les paramètres et cliquez sur "Execute"
# Exécuter tous les tests
./gradlew test
# Exécuter avec rapport de couverture
./gradlew test jacocoTestReport
# Exécuter une classe de test spécifique
./gradlew test --tests "SocialAppApplicationTests"L'application utilise SQLite comme base de données embarquée :
- Fichier de base de données :
sns_api.db(créé automatiquement) - Emplacement : Répertoire racine du projet
- Schéma : Auto-généré par Hibernate
- Données d'exemple : Chargées depuis
data.sql(si présent)
Pour réinitialiser la base de données, supprimez simplement le fichier sns_api.db et redémarrez l'application.
Paramètres de configuration clés dans application.properties :
# Paramètres de l'Application
spring.application.name=socialapp
server.port=8080
# Configuration de la Base de Données
spring.datasource.url=jdbc:sqlite:sns_api.db
spring.jpa.hibernate.ddl-auto=update
# Configuration OpenAPI/Swagger
springdoc.swagger-ui.path=/swagger-ui.html
springdoc.swagger-ui.operationsSorter=methodL'application supporte à la fois localhost et GitHub Codespaces :
- Localhost :
http://localhost:8080 - GitHub Codespaces : Auto-détecté et configuré dynamiquement
L'application détecte automatiquement l'environnement d'exécution :
- Développement Local : Utilise
http://localhost:8080 - GitHub Codespaces : Utilise
https://{codespace-name}-8080.{domain}
# Créer un JAR de production
./gradlew clean build
# Emplacement du JAR
ls -la build/libs/socialapp-0.0.1-SNAPSHOT.jar# Exécuter avec le profil de production
java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# Ou avec un port personnalisé
java -jar build/libs/socialapp-0.0.1-SNAPSHOT.jar --server.port=8081# Trouver le processus utilisant le port 8080
lsof -i :8080
# Tuer le processus (remplacer PID)
kill -9 <PID>
# Ou utiliser un port différent
./gradlew bootRun --args='--server.port=8081'# Nettoyer et reconstruire
./gradlew clean build
# Mettre à jour le wrapper Gradle
./gradlew wrapper --gradle-version=8.5# Réinitialiser la base de données
rm sns_api.db
./gradlew bootRun- Journaux d'application : Sortie console lors de l'exécution de
./gradlew bootRun - Vérification de santé :
GET /actuator/health - Information de l'application :
GET /actuator/info
- CORS activé pour toutes les origines
- Base de données SQLite (non adaptée à l'échelle de production)
- Aucune authentification/autorisation
Pour un déploiement en production, considérez :
- Restreindre CORS à des domaines spécifiques
- Utiliser PostgreSQL/MySQL au lieu de SQLite
- Implémenter Spring Security pour l'authentification
- Ajouter la limitation de débit et la désinfection d'entrée
- Utiliser le chiffrement HTTPS/TLS
Avertissement: Ce document a été localisé par GitHub Copilot. Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un issue.