DÉMO
dev only

API REST

API REST stateless avec API Platform 4 et authentification JWT.

Vue d'ensemble

L'API REST est construite avec API Platform 4 et utilise des ressources DTO (Data Transfer Objects) couplées à des State Providers/Processors sur mesure. Toutes les routes sont protégées par un JWT Bearer token émis par lexik/jwt-authentication-bundle.

La documentation interactive OpenAPI est disponible sur /api/docs (accessible publiquement, même en prod).

Fichier Rôle
src/ApiResource/MeResource.phpDTO — profil utilisateur courant
src/ApiResource/OrganizationResource.phpDTO — organisations
src/ApiResource/MemberResource.phpDTO — membres d'une organisation
src/ApiResource/SubscriptionResource.phpDTO — abonnement d'une organisation
src/State/Api/State Providers & Processors (logique multi-tenant)
config/packages/api_platform.yamlConfig API Platform
config/jwt/Clés RSA JWT (générées localement, non committées)

Authentification JWT

Toutes les requêtes sur /api (hors POST /api/auth/token et /api/docs) requièrent un header Authorization: Bearer <token>.

Obtenir un token

POST /api/auth/token Content-Type: application/json { "email": "user@example.com", "password": "your_password" }

Réponse :

{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..." }

Utiliser le token

GET /api/me Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...

Génération des clés (première fois)

php bin/console lexik:jwt:generate-keypair

Les clés RSA sont générées dans config/jwt/ et sont exclues du dépôt git via .gitignore. La passphrase est configurée via la variable JWT_PASSPHRASE dans .env.local.

Endpoints

Méthode URL Description Auth
POST /api/auth/token Obtenir un JWT (email + password) Public
GET /api/me Profil de l'utilisateur courant JWT
PATCH /api/me Modifier firstName, lastName, preferredLocale JWT
GET /api/organizations Liste des organisations de l'utilisateur JWT
GET /api/organizations/{id} Détail d'une organisation (membre actif requis) JWT
GET /api/organizations/{id}/members Membres d'une organisation (membre actif requis) JWT
GET /api/organizations/{id}/subscription Abonnement actif d'une organisation JWT

Sécurité multi-tenant

Chaque State Provider vérifie manuellement que l'utilisateur JWT est un membre actif (non suspendu) de l'organisation demandée. En cas d'accès non autorisé, une réponse 404 Not Found est retournée pour éviter l'énumération des ressources.

Exemple dans OrganizationProvider :

$membership = $this->memberRepository->findActiveMembership($user, $organization); if (null === $membership) { throw new NotFoundHttpException(); // 404, pas 403 }

Étendre l'API

Pour ajouter un nouvel endpoint, créez un DTO dans src/ApiResource/ avec l'attribut #[ApiResource], puis un State Provider dans src/State/Api/.

  1. 1

    Créer le DTO dans src/ApiResource/MyResource.php

  2. 2

    Ajouter un ProviderInterface dans src/State/Api/MyProvider.php

  3. 3

    Vérifier que l'utilisateur a accès aux données (logique multi-tenant)

Loading…
Loading the web debug toolbar…
Attempt #