Aller au contenu principal

Standards de code backend

Statut

Document de cadrage backend — version initiale.

Objectif

Les standards backend doivent rendre l'API Laravel lisible, fiable et maintenable.

Ils doivent suivre les conventions visibles du projet plutôt que créer une abstraction inutile.

Standards visibles

Le code montre plusieurs conventions :

  • declare(strict_types=1) dans de nombreux fichiers ;
  • namespaces par module ;
  • contrôleurs séparés lecture/écriture dans certains domaines ;
  • DTOs final avec readonly ;
  • Form Requests pour validation ;
  • services par domaine ;
  • policies pour autorisation ;
  • providers modulaires ;
  • tests feature par module ;
  • Laravel Pint présent en dépendance dev.

Conventions générales

  • Un fichier par classe.
  • Namespace aligné sur le chemin.
  • Classes nommées selon leur rôle.
  • Contrôleurs fins.
  • Services métier explicites.
  • Requests pour validation.
  • Policies ou middlewares pour autorisation.
  • DTOs ou Resources pour sorties API.
  • Jobs pour traitements asynchrones.

Nommage

ÉlémentConvention
ControllerSomethingController ou SomethingReadController.
ServiceSomethingService, SomethingReadService, SomethingWriteService.
RequestCreateSomethingRequest, UpdateSomethingRequest.
DTOSomethingDTO.
PolicySomethingPolicy.
JobVerbe métier au présent ou impératif clair : ExpireBoosts.

Sécurité du code

  • Ne jamais exposer secrets, tokens ou données de paiement.
  • Ne pas accepter de champs interdits depuis le payload.
  • Filtrer explicitement les champs modifiables.
  • Valider les entrées.
  • Autoriser côté backend.
  • Journaliser sans fuite de données sensibles.

Style

La cible est d'utiliser Laravel Pint comme outil de formatage PHP.

Le style doit rester :

  • simple ;
  • typé quand pertinent ;
  • explicite ;
  • testable ;
  • cohérent avec Laravel.

Points à clarifier

  • Règles exactes Pint et CI.
  • Convention officielle DTO vs Resources.
  • Politique de commentaires.
  • Niveau de typage attendu.
  • Convention Actions/Events si introduits.