web-dev-qa-db-fra.com

Scala l'infrastructure d'un serveur API Rest?

Nous envisageons de déplacer notre serveur API Rest (il se trouve dans le service Web, sur Symfony PHP) vers Scala pour plusieurs raisons: rapidité, pas de surcharge, moins de processeur, moins de code, évolutivité, etc. Je ne savais pas que Scala jusqu'à il y a quelques jours, mais j'apprécie ce que j'ai appris ces jours-ci avec le livre Scala et tous les messages et questions de blog (ce n'est pas si moche!)

J'ai les options suivantes:

  • construire le serveur API Rest à partir de zéro
  • utilisez un petit framework Scala web 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échargement de fichiers, statistiques (peut-être Redis).

Que recommanderais-tu?

103
fesja

Dans aucun ordre particulier:

86
oluies

Je vais recommander Non filtré . C'est un framework Web idiomatique qui fait les choses "à la manière" Scala ") et est très beau.

22
Max A.

Regardez Xitrum (j'en suis l'auteur), il fournit tout ce que vous avez énuméré. Sa doc est assez volumineux. De README:

Xitrum est un framework Web et un serveur Web asynchrones et groupés Scala) 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'êtes pas obligé de déclarer tous les itinéraires dans un seul endroit.
  • Async, dans l'esprit de Netty.
  • Les sessions peuvent être stockées dans des cookies ou en grappe Hazelcast.
  • Cache en cours de traitement et en cluster, vous n'avez pas besoin de serveurs de cache distincts.
  • Comet en cours de traitement et en cluster, vous n'avez pas besoin d'un serveur Comet distinct.
15
Ngoc Dao

J'ajouterais deux options supplémentaires: akka avec prise en charge JAX-RS intégrée et simplement utiliser JAX-RS directement (probablement l'implémentation Jersey). Bien que moins discutable que d’autres (utilisant des annotations pour lier paramètres et 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 m'attendrais à ce qu'il soit excellent là-bas, à obtenir une extensibilité impressionnante grâce à sa mise en œuvre basée sur la continuation.

7
Dave Griffith

Examinez Finch , une Scala pour la construction Finagle HTTP. Finch vous permet de construire des points de terminaison HTTP complexes à partir de la nombre de blocs de base prédéfinis De la même manière que pour les combinateurs d’analyseur, les points finaux Finch sont faciles à réutiliser, à composer, à tester et à raisonner.

4

Toutes les bonnes réponses jusqu'à présent. Un point en faveur de Lift est son RestHelper , ce qui peut faciliter la rédaction de méthodes API simples et élégantes. En outre, toutes les autres tâches que vous souhaitez effectuer doivent être assez simples à mettre en œuvre dans Lift. Cela étant dit, Memcache pourrait ne pas être nécessaire.

3
pr1001

Un peu tard sur la scène, mais je recommanderais sans aucun doute l’utilisation du cadre Bowler pour la création de REST). Il prend en charge de manière efficace la conversion automatique des classes de cas!

2
cracked_all