Création d'une API REST de tableau d'affichage minimale viable à des fins éducatives.
Obtenir des listes de toutes les balises, publications et utilisateurs
Rechercher dans les listes
Inscription des utilisateurs
Un utilisateur enregistré peut :
Ajouter de nouveaux messages
Commenter les articles existants
Supprimez et modifiez vos publications et commentaires
PHP8.1+
Laravel10
Compositeur
MySQL
POST
/api/v1/auth/register
S'inscrireNom | Taper | Type de données | Description |
---|---|---|---|
nom | requis | chaîne | Nom |
surnom | requis | chaîne | Identifiant lisible par l'homme |
requis | chaîne | Adresse email | |
mot de passe | requis | chaîne | Mot de passe |
mot de passe_confirmé | requis | chaîne | Confirmation du mot de passe |
201
CREATED
{ "access_token", "token_type": "Bearer" }
POST
/api/v1/auth/login
ConnexionNom | Taper | Type de données | Description |
---|---|---|---|
requis | chaîne | Adresse email | |
mot de passe | requis | chaîne | Mot de passe |
200
OK
{ "access_token", "token_type":"Bearer" }
POST
/api/v1/auth/logout
DéconnexionClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
204
NO CONTENT
GET
/api/v1/profile
Obtenir un profil utilisateur authentifiéClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/profile/posts
Récupère le profil et les publications d'un utilisateur authentifiéClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
Nom | Taper | Type de données | Description |
---|---|---|---|
par_page | facultatif | int | Nombre de messages par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug", }, ... ], "comments_count" } ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/profile/comments
Récupère le profil et les commentaires d'un utilisateur authentifiéClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
Nom | Taper | Type de données | Description |
---|---|---|---|
par_page | facultatif | int | Nombre de commentaires par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users
Obtenir tous les utilisateursNom | Taper | Type de données | Description |
---|---|---|---|
q | facultatif | chaîne | Requête de recherche |
par_page | facultatif | int | Nombre d'utilisateurs par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/users/{nickname}
Obtenir l'utilisateur200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/users/{nickname}/posts
Récupère l'utilisateur et ses messagesNom | Taper | Type de données | Description |
---|---|---|---|
par_page | facultatif | int | Nombre de messages par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users/{nickname}/comments
Récupère l'utilisateur et ses commentairesNom | Taper | Type de données | Description |
---|---|---|---|
par_page | facultatif | int | Nombre de commentaires par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/tags
Récupérer toutes les balisesNom | Taper | Type de données | Description |
---|---|---|---|
q | facultatif | chaîne | Requête de recherche |
200
OK
{ "data": [ { "tag_id", "name", "slug", "post_count" }, ... ] }
GET
/api/v1/tags/{slug}
Récupère un tag et ses publicationsNom | Taper | Type de données | Description |
---|---|---|---|
par_page | facultatif | int | Nombre de messages par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname" }, ], "links": {...}, "meta": {...}, "tag": { "tag_id", "name", "slug" } }
GET
/api/v1/posts
Récupérer tous les messagesNom | Taper | Type de données | Description |
---|---|---|---|
q | facultatif | chaîne | Requête de recherche |
par_page | facultatif | int | Nombre de messages par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "post_id, "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/posts/{id}
Récupérer une publication et ses commentairesNom | Taper | Type de données | Description |
---|---|---|---|
par_page | facultatif | int | Nombre de commentaires par page |
page | facultatif | int | Numéro de page |
200
OK
{ "data": [ { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "post": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] } }
POST
/api/v1/posts
Ajouter un nouveau messageClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
Nom | Taper | Type de données | Description |
---|---|---|---|
titre | facultatif | chaîne | Titre |
prix | facultatif | flotter | Prix |
description | facultatif | chaîne | Description |
balises[identifiant] | facultatif | tableau[int] | Tableau d'ID de balise |
201
CREATED
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
PUT
/api/v1/posts/{id}
Modifier le messageClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
Nom | Taper | Type de données | Description |
---|---|---|---|
titre | facultatif | chaîne | Titre |
prix | facultatif | flotter | Prix |
description | facultatif | chaîne | Description |
balises[identifiant] | facultatif | tableau[int] | Tableau d'ID de balise |
200
OK
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
DELETE
/api/v1/posts/{id}
Supprimer une publicationClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
204
NO CONTENT
POST
/api/v1/posts/{id}/comments
Ajouter un nouveau commentaire à une publicationClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
Nom | Taper | Type de données | Description |
---|---|---|---|
corps | requis | chaîne | Texte du commentaire |
201
CREATED
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", }, }
PUT
/api/v1/comments/{id}
Modifier le commentaireClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
Nom | Taper | Type de données | Description |
---|---|---|---|
corps | requis | chaîne | Texte du commentaire |
200
OK
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", } }
DELETE
/api/v1/comments/{id}
Supprimer un commentaireClé | Valeur |
---|---|
Autorisation | Porteur {jeton} |
204
NO CONTENT
Clonez ce dépôt et accédez au dossier de votre projet :
git clone https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
Installer les dépendances :
installation du compositeur
Démarrez MySQL, modifiez les paramètres de connexion à la base de données dans le fichier .env.example et exécutez :
copier .env.exemple .env
Exécutez la commande pour exécuter les migrations :
php artisan migrer
Ou si vous souhaitez remplir la base de données avec des données factices :
php artisan migre --seed
Démarrez le serveur Web :
service artisanal php
Ouvrez dans votre navigateur, par exemple, http://localhost:8000/api/v1/posts
Créez une nouvelle base de données à tester, modifiez les paramètres pour vous y connecter dans le fichier .env.testing et exécutez :
test artisanal php
Clonez ce dépôt et accédez au dossier de votre projet :
git clone https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
Installer les dépendances :
exécution du docker --rm -u "$(id -u):$(id -g)" -v "$(mot de passe):/var/www/html" -w /var/www/html laravelsail/php82-composer:dernière composer install --ignore-platform-reqs
Créez un fichier .env :
cp.env.docker.examlpe.env
Créez un alias de shell et exécutez Sail :
alias voile='[ -f voile ] && sh voile || sh vendeur/bin/sail'sail up -d
Exécutez la commande pour exécuter les migrations :
voile artisan migrer
Ou si vous souhaitez remplir la base de données avec des données factices :
voile artisan migrer - graine
Ouvrir dans un navigateur, par exemple http://localhost/api/v1/posts
Pour arrêter les conteneurs, utilisez :
arrêt de voile
Configurez le fichier .env.testing :
cp .env.docker.testing .env.testing
Exécutez les tests :
test d'artisan de voile