Files
BUT2/mini-crm/mini-crm_TP9_TP10/README_TP9_TP10.md
T

4.4 KiB

Mini-CRM — TP9 + TP10

Ce ZIP contient les fichiers à ajouter/remplacer dans le projet mini-crm du dépôt yolou/BUT2.

Ce que j'ai fait — TP9

  • J'ai activé le routage API dans bootstrap/app.php.
  • J'ai créé routes/api.php.
  • J'ai ajouté GET /api/test.
  • J'ai créé un contrôleur séparé Api/ClientController.
  • J'ai ajouté GET /api/clients pour récupérer les clients.
  • J'ai ajouté GET /api/clients/{client} avec le route model binding.
  • J'ai ajouté POST /api/clients pour créer un client.
  • J'ai validé name, email, phone et city.
  • Comme la migration du projet impose un email unique, j'ai ajouté la règle unique:clients,email.
  • J'ai réalisé le défi autonome : GET /api/clients/search?email=....
  • Si aucun email ne correspond, l'API renvoie 404.

Ce que j'ai fait — TP10

  • J'ai créé ClientResource afin de maîtriser le JSON exposé.
  • J'utilise la Resource pour la liste, le détail, la création et la modification.
  • J'ai ajouté PATCH /api/clients/{client}.
  • Pour PATCH, j'utilise sometimes afin de permettre une modification partielle.
  • Pour l'email, j'ignore l'identifiant du client courant lors du contrôle d'unicité.
  • J'ai ajouté DELETE /api/clients/{client}.
  • Une suppression réussie renvoie HTTP 204 No Content.
  • J'ai réalisé le défi de pagination avec Client::paginate(10).

Installation dans ton projet

Copie le contenu de ce dossier dans :

C:\Users\Junior\Desktop\laraveltp\mini_crm_aylane

en conservant l'arborescence.

Les fichiers principaux sont :

  • bootstrap/app.php
  • routes/api.php
  • app/Http/Controllers/Api/ClientController.php
  • app/Http/Resources/ClientResource.php

Le modèle app/Models/Client.php de ton dépôt possède déjà les champs fillable name, email, phone, city, donc il n'a pas besoin d'être remplacé.

Commandes à lancer

php artisan optimize:clear
php artisan route:list --path=api
php artisan serve

Le sujet propose php artisan install:api, notamment pour installer Sanctum. Ici Sanctum n'est pas nécessaire au fonctionnement demandé dans les TP9/TP10 : le routage API est déclaré directement dans bootstrap/app.php. Le TP10 demande justement de ne pas mettre en place un nouveau système d'authentification pour cette partie pédagogique.

Routes attendues

Méthode URL Rôle
GET /api/test Vérifier l'API
GET /api/clients Clients paginés (10/page)
GET /api/clients/search?email=... Recherche par email
GET /api/clients/{client} Détail d'un client
POST /api/clients Créer un client
PATCH /api/clients/{client} Modifier partiellement
DELETE /api/clients/{client} Supprimer

Tests rapides

Créer

curl -X POST http://127.0.0.1:8000/api/clients ^
  -H "Content-Type: application/json" ^
  -H "Accept: application/json" ^
  -d "{\"name\":\"Thomas Leroy\",\"email\":\"thomas@example.com\",\"city\":\"Paris\"}"

Résultat attendu : 201 Created.

Modifier

curl -X PATCH http://127.0.0.1:8000/api/clients/1 ^
  -H "Content-Type: application/json" ^
  -H "Accept: application/json" ^
  -d "{\"name\":\"Jean Dupont Modifié\"}"

Résultat attendu : 200 OK.

Supprimer

curl -X DELETE http://127.0.0.1:8000/api/clients/1 -H "Accept: application/json"

Résultat attendu : 204 No Content.

Pagination

Ouvrir :

http://127.0.0.1:8000/api/clients?page=1

puis :

http://127.0.0.1:8000/api/clients?page=2

Réponses sécurité TP10

  1. Dans un vrai CRM, les routes de consultation, création, modification et suppression des clients devraient être protégées car elles manipulent des données privées ou permettent de les modifier.
  2. POST est sensible car un utilisateur non autorisé pourrait créer de fausses données dans la base.
  3. Cacher un bouton dans l'interface ne sécurise rien : quelqu'un peut appeler directement l'URL de l'API. La vérification doit être faite côté serveur.
  4. Une Policy doit être vérifiée dans le contrôleur avant l'opération sensible (par exemple avant update() ou delete()), une fois l'utilisateur authentifié.

Codes HTTP à connaître

  • 200 : requête réussie
  • 201 : ressource créée
  • 204 : suppression réussie sans contenu
  • 404 : client inexistant
  • 422 : données invalides
  • 401 : utilisateur non authentifié
  • 403 : utilisateur authentifié mais non autorisé