Files
ox_speak_server_v2/README.md
2026-03-16 00:56:28 +01:00

1.8 KiB

Architecture & Philosophie

Ce projet s'inspire de la philosophie de Rust : "Rendre les états illégaux impossibles à représenter".

Si vous venez de Django, voici les principales différences à garder en tête :

1. Extracteurs vs Objet Request

Contrairement à Django qui passe un objet request "fourre-tout" à chaque vue, ce projet utilise des **Extracteurs Axum ** (dans la signature des fonctions).

  • Le "Contrat" par la signature : Si une vue demande user: CurrentUser, Axum garantit que l'utilisateur est authentifié. Si ce n'est pas le cas, la vue n'est pas appelée et une erreur 401 est retournée automatiquement.
  • Auto-documentation : En regardant simplement la signature d'une fonction, on sait exactement ce dont elle a besoin (Base de données, Utilisateur, JSON, etc.).

2. Le Flux d'Authentification

  1. Middleware (context_middleware) : Intercepte la requête, vérifie le JWT, récupère l'utilisateur complet en base de données, et injecte le tout dans RequestContext.
  2. Extensions : Le RequestContext est stocké dans les "extensions" de la requête (un espace de stockage de type Map).
  3. Extracteurs : L'extracteur CurrentUser récupère les données depuis les extensions et les rend disponibles dans la signature de votre vue.

3. Transparence (Deref)

L'objet CurrentUser enveloppe le modèle de base de données. Grâce à l'implémentation de Deref, vous pouvez accéder aux champs de l'utilisateur (ex: user.is_superuser) directement comme s'il s'agissait du modèle lui-même.


Documentation

  • API (REST & WebSocket) : /swagger-ui ou /scalar
    • La documentation du WebSocket est incluse dans l'OpenAPI via une route descriptive /handler/ws/.

TODO

Terminer le système d'authentification (login, changement de mot de passe...)