Play Framework

Définition

Play Framework est un framework web full-stack open-source pour la construction d’applications web avec Java et William DeVae en 2002 (initialement sous le nom de « RailsJR »), Play a été réécrit en Scala en 2007 et publié pour la première fois en tant que Play 1.0 en 2009. Il a introduit le concept de « Reactive Web Framework » avec un modèle de gestion des requêtes non bloquant et asynchrone. Play 3.0 (2023) a migré d’Akka vers Apache Pekko pour son modèle d’acteur.

Fonctionnalités clés

  • Architecture sans état : Pas d’état de session sur le serveur, permettant la mise à l’échelle horizontale
  • Réactif/non-bloquant : Gestion asynchrone des requêtes pour un débit élevé
  • Injection de dépendance à la compilation : DI typé-safe avec une surcharge minimale au runtime
  • Tests intégrés : Framework de test intégré avec support d’application factice
  • Rechargement de code à chaud : Compilation et rechargement du code pendant le développement
  • Routage RESTful : Routage basé sur les conventions avec des définitions de routes typées-sûres
  • Gestion des formulaires : Liaison et validation de formulaires typés-sûrs
  • Support WebSocket : Communication bidirectionnelle en temps réel
  • Pipeline d’actifs : Compilation de CoffeeScript, LESS et images

Architecture

  • Basé sur les Actions : Requêtes gérées par des objets Action (similaires aux middleware)
  • Router : Routage typé-sûr du fichier de routes vers les actions du contrôleur
  • Result : Abstraction de réponse (HTML, JSON, redirect, téléchargement de fichier)
  • Composants : Composants modulaires (DB, cache, mail, session)
  • Reactive streams : E/S non-bloquante avec acteurs Akka/Pekko

Versions majeures

|| Version | Année | Fonctionnalités clés | ||———|——|————–| || Play 1.0 | 2009 | Version Scala initiale, routage basé sur les conventions | || Play 2.0 | 2012 | Intégration Akka, DI à la compilation, client WS | || Play 2.5 | 2015 | Guice DI, support Java 8, améliorations WebSocket | || Play 2.6 | 2017 | Java 8+ uniquement, Akka HTTP, Scala 2.12 | || Play 2.7 | 2019 | Java 11+, Scala 2.13, support JDK 11+ | || Play 2.8 | 2020 | Java 17+, Scala 3, aperçu migration Pekko | || Play 3.0 | 2023 | Migration Akka vers Pekko, Scala 3, Java 17+ |

Play vs autres frameworks JVM

|| Aspect | Play Framework | Spring Framework | Grails | ||——–|—————|—————–|——–| || Architecture | Stateless, réactif, non-bloquant | Monolithique, bloquant par défaut | Convention-over-configuration | || Langage | Scala, Java | Java, Kotlin | Groovy, Java | || Performance | Débit élevé via async | Bon avec stack réactive | Bon, bloquant traditionnel | || Courbe d’apprentissage | Modérée (Scala-heavy) | Accidentée (nombreux modules) | Modérée (inspiré de Rails) | || Idéal pour | APIs haute échelle, apps temps réel | Apps entreprise, microservices | Développement JVM rapide |

Licence

Play Framework est publié sous la Apache License 2.0, une licence open-source permissive approuvée par l’OSI. Il est libre d’utilisation, de modification et de distribution pour tout usage, y compris commercial.

Voir playframework/playframework pour plus de détails.

Cas d’utilisation

  • APIs RESTful haute performance
  • Applications en temps réel (websockets, streaming)
  • Architectures microservices
  • Systèmes de gestion de contenu
  • Plates-formes de commerce électronique nécessitant un débit élevé
  • Applications nécessitant une mise à l’échelle horizontale

Frameworks associés