Scala-Framework für einen Rest API Server? [geschlossen]

105

Wir denken aus mehreren Gründen darüber nach, unseren Rest API-Server (er befindet sich im Webdienst von Symfony PHP) auf Scala zu verlagern: Geschwindigkeit, kein Overhead, weniger CPU, weniger Code, Skalierbarkeit usw. Ich kannte Scala erst nach mehreren Vor Tagen, aber ich habe es genossen, was ich in diesen Tagen mit dem Scala-Buch und all den Blog-Posts und Fragen gelernt habe (es ist nicht so hässlich!)

Ich habe folgende Möglichkeiten:

  • Erstellen Sie den Rest API Server von Grund auf neu
  • Verwenden Sie ein winziges Scala-Webframework wie Scalatra
  • benutze Lift

Einige Dinge, die ich verwenden muss: HTTP-Anforderungen, JSON-Ausgabe, MySQL (Daten), OAuth, Memcache (Cache), Protokolle, Datei-Uploads, Statistiken (möglicherweise Redis).

Was würden Sie empfehlen?

Fesja
quelle

Antworten:

87

In keiner bestimmten Reihenfolge:

oluies
quelle
1
Vielen Dank! Ich werde nach AKKA sehen, da es sehr leicht und skalierbar zu sein scheint
Fesja
1
NB Ich hoffe, jemand schafft es , restfulie.caelum.com.br in Scala zu integrieren oder zu portieren . Eine Option ist jetzt die Verwendung von Restfulie als Frontend für Scala auf JRuby.
Oluies
3
+1, ich benutze Akka bei der Arbeit, um einen Hochleistungs-API-Server mit Strom zu versorgen. Der Nachteil der Verwendung von JAX-RS mit Akka ist, dass JAX-RS mit einer Menge Java-Besonderheiten ausgestattet ist, die nicht sehr sauber in ein reines Scala-Projekt passen. Trotzdem macht Akka das ganze Geschäft wert.
Max A.
2
Akka ist eine gute Wahl. Wenn Sie JSON bereitstellen, schauen Sie sich Lift JSON an. Sie können mischen und anpassen, kein Problem.
andyczerwonka
1
@ Santiagobasult Ich würde sagen, dass Play! 2.0 und Play-Mini! 2.0 passiert
oluies
22

Ich werde Unfiltered empfehlen . Es ist ein idiomatisches Web-Framework, das Dinge "auf Scala-Art" macht und sehr schön ist.

Max A.
quelle
15

Schauen Sie sich Xitrum an (ich bin sein Autor), es bietet alles, was Sie aufgelistet haben. Das Dokument ist ziemlich umfangreich. Aus der README:

Xitrum ist ein asynchrones und geclustertes Scala-Webframework und ein Webserver über Netty und Hazelcast:

  • Annotation wird im Sinne von JAX-RS für URL-Routen verwendet. Sie müssen nicht alle Routen an einem Ort deklarieren.
  • Async im Geiste von Netty.
  • Sitzungen können in Cookies oder Hazelcast-Clustern gespeichert werden.
  • In-Process- und Clustered-Cache benötigen Sie keine separaten Cache-Server.
  • In Bearbeitung und Clustered Comet benötigen Sie keinen separaten Comet-Server.
Ngoc Dao
quelle
7

Ich würde zwei weitere Optionen hinzufügen: akka mit integrierter JAX-RS-Unterstützung und einfach direktes Verwenden von JAX-RS (wahrscheinlich die Jersey-Implementierung). JAX-RS ist zwar weniger "Scala-y" als andere (basierend auf Anmerkungen zum Binden von Parametern und Pfaden), aber es ist eine Freude, es zu verwenden und alle Probleme der Webdienstcodierung mit minimalem Platzbedarf sauber zu lösen. Ich habe es nicht über akka verwendet, ich würde erwarten, dass es dort ausgezeichnet ist und durch seine fortlaufbasierte Implementierung eine beeindruckende Skalierbarkeit erhält.

Dave Griffith
quelle
Vielen Dank! Ich werde AKKA mit JAX-RS als @Brent überprüfen und Sie sagten. Es scheint wirklich sehr leicht mit minimalem Platzbedarf zu sein, was für eine API wirklich wichtig ist, wenn Sie wirklich schnell gehen möchten.
Fesja
1
Sie müssen JAX-RS 2.0 (derzeit Beta-Version) verwenden, um die Skalierbarkeit zu erhalten, da die älteren Versionen auf unangenehmen Threadlocal basieren (dh das Anhalten und Fortsetzen von Threads wird nicht unterstützt).
Adam Gent
4

Schauen Sie sich Finch an , eine Scala-Kombinatorbibliothek zum Erstellen von Finagle- HTTP-Diensten. Mit Finch können Sie komplexe HTTP-Endpunkte aus der Anzahl der vordefinierten Basisblöcke erstellen. Ähnlich wie bei Parser-Kombinatoren lassen sich Finch-Endpunkte leicht wiederverwenden, zusammenstellen, testen und begründen.

Vladimir Kostyukov
quelle
3

Alles gute Antworten bisher. Ein Punkt für Lift ist der RestHelper , mit dem sich kurze, elegante API-Methoden ganz einfach schreiben lassen. Darüber hinaus sollten alle anderen Dinge, die Sie tun möchten, recht einfach in Lift zu implementieren sein. Davon abgesehen ist Memcache möglicherweise nicht erforderlich.

pr1001
quelle
Vielen Dank! Warum denkst du nicht, dass Memcache notwendig ist? Das hängt natürlich davon ab, aber wir haben einige Abfragen, die sehr wahrscheinlich ständig erledigt werden. Es ist also Zeit zu gewinnen und die Datenbank weniger zu belasten.
Fesja
Ich gehe wirklich nur von dem ab, was David Pollak gestern gesagt hat. Grundsätzlich werden durch das Caching in Lift viele Anwendungsfälle von Memcache entfernt. Hier ist seine Nachricht und es gibt ein paar andere Beiträge im Thread über memcache: groups.google.com/group/scala-base/msg/4b11cbd357bfecf0
pr1001
2

Ein bisschen spät in der Szene, aber ich würde definitiv empfehlen, das Bowler- Framework für die Erstellung von REST-APIs zu verwenden. Es ist klein, auf den Punkt und automatische Unterstützung für die Konvertierung von Fallklassen!

cracked_all
quelle