montar - ¿Marco de Scala para un servidor API de reposo?
json server online (7)
Agregaría dos opciones más: akka con soporte integrado JAX-RS, y simplemente usar JAX-RS directamente (probablemente la implementación de Jersey). Aunque podría decirse que es menos "Scala-y" que otros (basándose en anotaciones para vincular parámetros y rutas), JAX-RS es un placer de usar, ya que resuelve limpiamente todos los problemas de la codificación del servicio web con un espacio mínimo. No lo he usado a través de akka, hubiera anticipado que sería excelente allí, obteniendo una escalabilidad impresionante a través de su implementación basada en la continuación.
Estamos pensando en trasladar nuestro servidor Rest API (está dentro del servicio web, en Symfony PHP) a Scala por varias razones: velocidad, sin sobrecarga, menos CPU, menos código, escalabilidad, etc. No conocí Scala hasta varios Hace días, pero he estado disfrutando de lo que he estado aprendiendo estos días con el libro de Scala y todas las publicaciones y preguntas del blog (¡no es tan feo!)
Tengo las siguientes opciones:
- construir el servidor API Rest desde cero
- usa un pequeño framework web de Scala como Scalatra
- usar Lift
Algunas cosas que tendré que usar: solicitudes HTTP, salida JSON, MySQL (datos), OAuth, Memcache (caché), registros, cargas de archivos, estadísticas (tal vez Redis).
¿Qué recomendarías?
Eche un vistazo a Finch , una biblioteca combinadora de Scala para construir servicios Finagle HTTP. Finch le permite construir puntos finales HTTP complejos a partir del número de bloques básicos predefinidos. De forma similar a los combinadores de analizadores, los puntos finales de Finch son fáciles de reutilizar, componer, probar y razonar.
Eche un vistazo a Xitrum (soy su autor), proporciona todo lo que enumeró. Su documento es bastante extenso. De README:
Xitrum es un sistema web asincrónico y en clúster de Scala y un servidor web sobre Netty y Hazelcast:
- La anotación se usa para rutas de URL, en el espíritu de JAX-RS. No tiene que declarar todas las rutas en un solo lugar.
- Async, en el espíritu de Netty.
- Las sesiones se pueden almacenar en cookies o en Hazelcast agrupados.
- Caché en proceso y en clúster, no necesita servidores de caché separados.
- Comet en proceso y agrupado, no necesita un servidor Comet por separado.
Sin ningún orden en particular:
- Akka HTTP
- Rociar
- Paypal squbs (Akka / Spray)
- DropWizard
- REST.li
- http4s
- Ojos azules
- Finagle : un sistema RPC tolerante a fallos y agnóstico al protocolo
- ¡Jugar! y Play-mini! ( article ) ( tutorial )
- Lift / Lift JSON.- hace que sea sencillo proporcionar servicios REST.
Todas las buenas respuestas hasta ahora. Un punto a favor de Lift es su Lift , que puede hacer que sea bastante fácil escribir métodos API cortos y elegantes. Además, todas las demás cosas que desee hacer deberían ser bastante sencillas de implementar en Lift. Dicho esto, Memcache podría no ser necesario.
Un poco tarde en la escena, pero definitivamente recomendaría utilizar el marco de Bowler para la creación de API REST. ¡Es pequeño, al punto y compatible con la conversión de clases de cajas automáticas!
Voy a recomendar Unfiltered . Es un marco web idiomático que hace las cosas "a la manera de Scala" y es muy hermoso.