Framework Scala pour un serveur API Rest?

Nous envisageons de déplacer notre serveur d’API Rest (qui est à l’intérieur du service Web, sur Symfony PHP) vers Scala pour plusieurs raisons: vitesse, pas de surcharge, moins de CPU, moins de code, évolutivité, etc. Il y a quelques jours, mais j’apprécie ce que j’ai appris ces jours-ci avec le livre Scala et tous les articles et questions du blog (ce n’est pas si moche!)

J’ai les options suivantes:

  • construire le Rest API Server à partir de zéro
  • utiliser un petit framework web Scala comme Scalatra
  • utiliser l’ascenseur

Certaines choses que je devrai utiliser: requêtes HTTP, sortie JSON, MySQL (données), OAuth, Memcache (cache), journaux, téléchargements de fichiers, Stats (peut-être Redis).

Que recommanderais-tu?

Dans aucun ordre particulier:

  • Akka HTTP
  • Vaporisateur
  • Squbs Paypal (Akka / Spray)
  • DropWizard
  • REST.li
  • http4s
  • Yeux bleus
  • Finagle – Un système RPC indépendant du protocole et à tolérance de pannes
  • Jouer! et Play-mini! ( article ) ( tutoriel )
  • Lift / Lift JSON – facilite la fourniture de services REST.

Je vais recommander Unfiltered . C’est un framework Web idiomatique qui fait les choses “à la manière Scala” et qui est très beau.

Jetez un oeil à Xitrum (je suis son auteur), il fournit tout ce que vous avez répertorié. Son doc est assez vaste. De README:

Xitrum est un framework Web et un serveur Web Scala asynchrone et en grappe, au-dessus de Netty et Hazelcast:

  • L’annotation est utilisée pour les itinéraires d’URL, dans l’esprit de JAX-RS. Vous n’avez pas à déclarer tous les itinéraires en un seul endroit.
  • Async, dans l’esprit de Netty.
  • Les sessions peuvent être stockées dans des cookies ou en cluster Hazelcast.
  • Le cache en processus et en cluster, vous n’avez pas besoin de serveurs de cache distincts.
  • Comet en cours de processus et en cluster, vous n’avez pas besoin d’un serveur Comet séparé.

J’appendais deux options supplémentaires: akka avec prise en charge intégrée de JAX-RS et utilisation directe de JAX-RS (probablement l’implémentation de Jersey). Bien que sans doute moins “Scala-y” que d’autres (en s’appuyant sur des annotations pour lier des parameters et des chemins), JAX-RS est un plaisir à utiliser, résolvant proprement tous les problèmes de codage de services Web avec un encombrement minimal. Je ne l’ai pas utilisé via Akka, je pense qu’il y sera excellent, avec une évolutivité impressionnante via son implémentation basée sur la continuation.

Jetez un coup d’œil à Finch , une bibliothèque de combinateurs Scala pour la construction des services HTTP Finagle . Finch vous permet de construire des points de terminaison HTTP complexes à partir du nombre de blocs de base prédéfinis. Comme pour les combinateurs d’parsingurs, les points d’extrémité Finch sont faciles à réutiliser, à composer, à tester et à raisonner.

Toutes les bonnes réponses jusqu’ici. Un des points forts de Lift est son RestHelper , qui facilite l’écriture de méthodes API courtes et élégantes. De plus, toutes les autres choses que vous voulez faire doivent être assez simples à mettre en œuvre dans Lift. Cela dit, Memcache pourrait ne pas être nécessaire.

Un peu en retard sur la scène, mais je recommanderais sans aucun doute l’utilisation du framework Bowler pour la création des API REST. C’est petit, au point et la conversion automatique de la classe de cas prend en charge!