Framework Scala pour un serveur d'API Rest? [fermé]

105

Nous réfléchissons à déplacer notre serveur d'API Rest (il 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. Je ne connaissais Scala que plusieurs il y a quelques jours, mais j'ai apprécié 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 serveur d'API Rest à partir de zéro
  • utiliser un petit framework Web Scala comme Scalatra
  • utiliser Lift

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

Que recommanderais-tu?

fesja
la source

Réponses:

87

Dans aucun ordre particulier:

oluies
la source
1
Merci! Je vais vérifier AKKA, car il semble être très léger et évolutif
fesja
1
NB J'espère que quelqu'un pourra intégrer ou porter restfulie.caelum.com.br à Scala. Une option consiste désormais à utiliser Restfulie comme interface vers Scala sur JRuby.
oluies
3
+1, j'utilise Akka au travail pour alimenter un serveur API hautes performances. L'inconvénient de l'utilisation de JAX-RS avec Akka est que JAX-RS est livré avec une tonne d'idiosyncrasies Java qui ne s'intègrent pas très proprement dans un projet pur-Scala. Pourtant, Akka en vaut la peine.
Max A.
2
Akka est un bon choix. Si vous servez du JSON, jetez un œil à Lift JSON. Vous pouvez mélanger et assortir, aucun problème.
andyczerwonka
1
@santiagobasult Je dirais que Play! 2.0 et Play-mini! 2.0 est arrivé
oluies
22

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

Max A.
la source
15

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

Xitrum est un framework Web et un serveur Web Scala asynchrones et en cluster au-dessus de Netty et Hazelcast:

  • L'annotation est utilisée pour les routes URL, dans l'esprit de JAX-RS. Vous n'êtes pas obligé de déclarer toutes les routes en un seul endroit.
  • Async, dans l'esprit de Netty.
  • Les sessions peuvent être stockées dans des cookies ou Hazelcast en cluster.
  • Cache en cours et en cluster, vous n'avez pas besoin de serveurs de cache séparés.
  • Comet en cours et en cluster, vous n'avez pas besoin d'un serveur Comet séparé.
Ngoc Dao
la source
7

J'ajouterais deux autres options: akka avec le support JAX-RS intégré, et simplement en utilisant JAX-RS directement (probablement l'implémentation Jersey). Bien que sans doute moins "Scala-y" que d'autres (en s'appuyant sur des annotations pour lier les paramètres et les chemins), JAX-RS est un plaisir à utiliser, résolvant proprement tous les problèmes de codage de service Web avec une empreinte minimale. Je ne l'ai pas utilisé via akka, je m'attendrais à ce qu'il soit excellent là-bas, obtenant une évolutivité impressionnante via son implémentation basée sur la continuation.

Dave Griffith
la source
Merci! Je vais vérifier AKKA avec JAX-RS comme @Brent et vous avez dit. Il semble vraiment très léger avec un encombrement minimal, ce qui est vraiment important pour une API, si vous voulez aller très vite.
fesja
1
Vous devrez utiliser JAX-RS 2.0 (qui est actuellement bêta) pour obtenir l'évolutivité car les anciennes versions reposent sur un threadlocal méchant (c'est-à-dire que la mise en pause et la reprise des threads ne sont pas prises en charge).
Adam Gent
4

Jetez un œil à Finch , une bibliothèque de combinateurs Scala pour la création de services HTTP Finagle . Finch vous permet de construire des points de terminaison HTTP complexes à partir du nombre de blocs de base prédéfinis. À l'instar des combinateurs d'analyseurs, les points de terminaison Finch sont faciles à réutiliser, à composer, à tester et à raisonner.

Vladimir Kostyukov
la source
3

Toutes les bonnes réponses jusqu'à présent. Un point en faveur de Lift est son RestHelper , qui peut faciliter l'écriture de méthodes API courtes et élégantes. De plus, toutes les autres choses que vous souhaitez faire doivent être assez simples à mettre en œuvre dans Lift. Cela étant dit, Memcache n'est peut-être pas nécessaire.

pr1001
la source
Merci! pourquoi ne pensez-vous pas que Memcache est nécessaire? Cela dépend bien sûr, mais nous avons plusieurs requêtes qui sont très susceptibles d'être effectuées en permanence, il est donc temps de gagner et de moins charger la base de données.
fesja le
Je pars vraiment de ce que David Pollak a dit hier. Fondamentalement, la mise en cache dans Lift supprime de nombreux cas d'utilisation de Memcache. Voici son message et il y a quelques autres messages dans le fil de discussion sur Memcache
pr1001
2

Un peu tard sur la scène, mais je recommanderais certainement d'utiliser le framework Bowler pour la création d'API REST. Il est petit, au point et support de conversion de classe de cas automatique!

cracked_all
la source