Framework Scala per un server API Rest? [chiuso]


105

Stiamo pensando di spostare il nostro Rest API Server (è all'interno del servizio web, su Symfony PHP) su Scala per diversi motivi: velocità, nessun overhead, meno CPU, meno codice, scalabilità, ecc. Non conoscevo Scala fino a diversi giorni fa, ma mi sono divertito con quello che ho imparato in questi giorni con il libro della Scala e tutti i post e le domande del blog (non è così brutto!)

Ho le seguenti opzioni:

  • crea il Rest API Server da zero
  • usa un minuscolo framework web Scala come Scalatra
  • utilizzare Lift

Alcune cose che dovrò usare: richieste HTTP, output JSON, MySQL (dati), OAuth, Memcache (cache), log, upload di file, statistiche (forse Redis).

Cosa raccomanderesti?

Risposte:


87

Senza un ordine particolare:


1
Grazie! Controllerò AKKA, perché sembra essere molto leggero e scalabile
fesja

1
NB Spero che qualcuno riesca a integrare o portare restfulie.caelum.com.br su Scala. Un'opzione ora è usare Restfulie come frontend per Scala su JRuby.
oluies

3
+1, utilizzo Akka al lavoro per alimentare un server API ad alte prestazioni. Lo svantaggio dell'utilizzo di JAX-RS con Akka è che JAX-RS viene caricato con una tonnellata di idiosincrasie Java che non si adattano perfettamente a un progetto Scala puro. Tuttavia, Akka fa valere l'intero affare.
Max A.

2
Akka è una buona scelta. Se stai servendo JSON, dai un'occhiata a Lift JSON. Puoi mescolare e abbinare, nessun problema.
andyczerwonka

1
@santiagobasult direi che Play! 2.0 e Play-mini! 2.0 accaduto
oluies

22

Raccomanderò Unfiltered . È un framework Web idiomatico che fa le cose "alla maniera di Scala" ed è molto bello.


15

Dai un'occhiata a Xitrum (sono il suo autore), fornisce tutto ciò che hai elencato. Il suo doc è piuttosto ampia. Da README:

Xitrum è un framework Web e server Web Scala asincrono e cluster su Netty e Hazelcast:

  • L'annotazione viene utilizzata per le rotte URL, nello spirito di JAX-RS. Non è necessario dichiarare tutte le rotte in un unico posto.
  • Async, nello spirito di Netty.
  • Le sessioni possono essere memorizzate in cookie o Hazelcast in cluster.
  • Cache in-process e in cluster, non sono necessari server cache separati.
  • Comet in-process e in cluster, non è necessario un server Comet separato.

7

Vorrei aggiungere altre due opzioni: akka con supporto JAX-RS integrato e semplicemente usando direttamente JAX-RS (probabilmente l'implementazione Jersey). Sebbene sia probabilmente meno "Scala-y" di altri (basandosi sulle annotazioni per legare parametri e percorsi), JAX-RS è una gioia da usare, risolvendo in modo pulito tutti i problemi della codifica dei servizi web con un ingombro minimo. Non l'ho usato tramite akka, mi aspetto che sia eccellente lì, ottenendo una scalabilità impressionante tramite la sua implementazione basata sulla continuazione.


Grazie! Controllerò AKKA con JAX-RS come @Brent e tu hai detto. Sembra davvero essere molto leggero con un ingombro minimo, il che è davvero importante per un'API, se vuoi andare molto veloce.
fesja

1
Dovrai usare JAX-RS 2.0 (che è attualmente beta) per ottenere la scalabilità poiché le versioni precedenti si basano su un brutto threadlocal (cioè la pausa e la ripresa del thread non sono supportate).
Adam Gent

4

Dai un'occhiata a Finch , una libreria combinatore Scala per la creazione di servizi HTTP Finagle . Finch ti consente di costruire endpoint HTTP complessi a partire dal numero di blocchi di base predefiniti. Analogamente ai combinatori di parser, gli endpoint Finch sono facili da riutilizzare, comporre, testare e ragionare.


3

Finora tutte buone risposte. Un punto a favore di Lift è il suo RestHelper , che può rendere abbastanza facile scrivere metodi API brevi ed eleganti. Inoltre, tutte le altre cose che vuoi fare dovrebbero essere abbastanza semplici da implementare in Lift. Detto questo, Memcache potrebbe non essere necessario.


Grazie! perché non pensi che memcache sia necessario? Dipende ovviamente, ma abbiamo diverse query che è molto probabile che vengano eseguite costantemente, quindi è ora di vincere e caricare meno il database.
fesja

In realtà mi limito a quello che ha detto ieri David Pollak. Fondamentalmente, il caching all'interno di Lift rimuove molti casi d'uso di memcache. Ecco il suo messaggio e ci sono alcuni altri post nel thread su memcache: groups.google.com/group/scala-base/msg/4b11cbd357bfecf0
pr1001

2

Un po 'in ritardo sulla scena, ma consiglio vivamente di utilizzare il framework Bowler per la creazione di API REST. È piccolo, al punto e supporta la conversione automatica della classe di casi!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.