Skip to content

Philosophie de conception

Principes fondamentaux de NENE2

nene2-python partage la même philosophie de conception que PHP NENE2.

API First

Le contrat de l'API JSON et le schéma OpenAPI sont définis avant le schéma de base de données. Utilisez uv run python src/scripts/export_openapi.py pour exporter un openapi.yaml statique à tout moment.

Couche HTTP fine

Les HTTP Handlers ne portent aucune logique métier. La règle est : parse → use-case → response — trois étapes, rien de plus. Les règles de domaine vivent dans les UseCases.

Lisible par les IA

Structure de répertoires explicite, petites classes (≤ 150 lignes), frontières typées — tout cela permet à un LLM de naviguer et modifier le code avec assurance.

Sécurité d'abord

La sécurité est une contrainte de conception, pas une réflexion après coup :

  • Toutes les entrées HTTP validées par Pydantic à la frontière
  • Requêtes paramétrées uniquement (prévention des injections SQL)
  • secrets.compare_digest pour une comparaison de tokens protégée contre les attaques temporelles
  • En-têtes de sécurité appliqués par le middleware à chaque réponse

Prêt pour la livraison LLM

Comme les UseCases sont indépendants de HTTP et de la base de données, ils peuvent être enregistrés directement comme outils MCP. src/example/mcp.py le démontre — 15 outils, sans plomberie supplémentaire. Voir Un UseCase, deux surfaces (HTTP + MCP) pour le code côte à côte et le test de parité qui le protège.


Python vs PHP NENE2

PHPPythonNotes
readonly class@dataclass(frozen=True, slots=True)Objet valeur immuable
ValidationException + ValidationErrorMêmes noms (nene2.validation)422 + Problem Details
PaginationQueryParsernene2.http.PaginationQueryParserParsing des paramètres de requête
PaginationResponsenene2.http.PaginationResponseRéponse paginée
ProblemDetailsResponseFactorynene2.http.problem_details_response()RFC 9457
ErrorHandlerMiddlewarenene2.middleware.ErrorHandlerMiddlewareCapture toutes les exceptions
PHPStan level 8mypy --strictSécurité de type maximale
PHP-CS-Fixerruff formatFormatage du code
UseCaseInterfacenene2.use_case.UseCaseProtocol[I, O]Typage structurel

Fonctionnalités exclusives à Python

FonctionnalitéAvantage Python
AsyncUseCaseProtocol[I, O]Pas d'équivalent PHP — protocole coroutine natif
Génération OpenAPI automatiqueFastAPI génère Swagger UI / ReDoc sans configuration
async/await natifFastAPI + uvicorn — I/O non bloquant de bout en bout
MCP SDKLe SDK Python d'Anthropic est l'implémentation de référence
mypy --strictPlus strict que PHPStan level 8 en pratique

Index des ADR

Les décisions de conception individuelles sont enregistrées dans des Architecture Decision Records :

Publié sous la licence MIT.