Framework Scala para um servidor de API Rest? [fechadas]

105

Estamos pensando em mover nosso Rest API Server (está dentro do serviço web, em Symfony PHP) para Scala por vários motivos: velocidade, sem sobrecarga, menos CPU, menos código, escalabilidade, etc. Eu não conhecia Scala até vários dias atrás, mas tenho gostado do que tenho aprendido esses dias com o livro Scala e todos os posts e perguntas do blog (não é tão feio!)

Tenho as seguintes opções:

  • construir o Rest API Server do zero
  • usar um pequeno framework web Scala como o Scalatra
  • usar elevador

Algumas coisas que terei que usar: solicitações HTTP, saída JSON, MySQL (dados), OAuth, Memcache (cache), Logs, uploads de arquivos, estatísticas (talvez Redis).

O que você recomendaria?

Fesja
fonte

Respostas:

87

Em nenhuma ordem particular:

oluies
fonte
1
obrigado! Vou verificar no AKKA, pois parece ser muito leve e escalável
fesja,
1
NB, espero que alguém consiga integrar ou portar restfulie.caelum.com.br para o Scala. Uma opção agora é usar o Restfulie como frontend para Scala no JRuby.
oluies,
3
+1, eu uso Akka no trabalho para alimentar um servidor API de alto desempenho. A desvantagem de usar JAX-RS com Akka é que JAX-RS vem carregado com uma tonelada de idiossincrasias Java que não se encaixam perfeitamente em um projeto Scala puro. Ainda assim, Akka faz com que todo o negócio valha a pena.
Max A.
2
Akka é uma boa escolha. Se você estiver servindo JSON, dê uma olhada em Lift JSON. Você pode misturar e combinar, sem problemas.
andyczerwonka,
1
@santiagobasult, eu diria que Play! 2.0 e Play-mini! 2.0 aconteceu
oluies
22

Vou recomendar o Unfiltered . É uma estrutura idiomática da Web que faz as coisas "do jeito Scala" e é muito bonita.

Max A.
fonte
15

Dê uma olhada no Xitrum (sou o autor), ele fornece tudo o que você listou. Sua documentação é bastante extensa. Do README:

Xitrum é um framework web Scala assíncrono e clusterizado e servidor web além do Netty e Hazelcast:

  • A anotação é usada para rotas de URL, no espírito de JAX-RS. Você não precisa declarar todas as rotas em um único lugar.
  • Async, no espírito do Netty.
  • As sessões podem ser armazenadas em cookies ou Hazelcast agrupado.
  • Cache em processo e em cluster, você não precisa de servidores de cache separados.
  • Comet em processo e em cluster, você não precisa de um servidor Comet separado.
Ngoc Dao
fonte
7

Eu adicionaria mais duas opções: akka com suporte JAX-RS integrado e simplesmente usando JAX-RS diretamente (provavelmente a implementação Jersey). Embora indiscutivelmente menos "Scala-y" do que outros (contando com anotações para vincular parâmetros e caminhos), JAX-RS é uma alegria de usar, resolvendo de forma limpa todos os problemas de codificação de serviço da web com pegada mínima. Eu não usei via akka, eu diria que é excelente lá, obtendo escalabilidade impressionante por meio de sua implementação baseada em continuação.

Dave Griffith
fonte
obrigado! Vou verificar no AKKA com JAX-RS como @Brent e você disse. Realmente parece ser muito leve com pegada mínima, o que é muito importante para uma API, se você quiser ir realmente rápido.
fesja,
1
Você terá que usar JAX-RS 2.0 (que é atualmente beta) para obter a escalabilidade, pois as versões mais antigas dependem de threadlocal desagradável (ou seja, a pausa e retomada de thread não são suportadas).
Adam Gent,
4

Dê uma olhada em Finch , uma biblioteca combinadora Scala para construir serviços HTTP Finagle . Finch permite que você construa terminais HTTP complexos a partir do número de blocos básicos predefinidos. Da mesma forma que os combinadores de analisador, os endpoints da Finch são fáceis de reutilizar, compor, testar e raciocinar.

Vladimir Kostyukov
fonte
3

Todas as boas respostas até agora. Um ponto a favor do Lift é seu RestHelper , que pode tornar muito fácil escrever métodos de API curtos e elegantes. Além disso, todas as outras coisas que você deseja fazer devem ser bem simples de implementar no Lift. Dito isso, o Memcache pode não ser necessário.

pr1001
fonte
obrigado! por que você não acha que o memcache é necessário? Depende é claro, mas temos várias consultas que provavelmente serão feitas constantemente, então é hora de vencer e menos carga no banco de dados.
fesja,
Na verdade, estou agindo de acordo com o que David Pollak disse ontem. Basicamente, o armazenamento em cache no Lift remove muitos casos de uso do memcache. Esta é a mensagem dele e há algumas outras postagens na
conversa
2

Um pouco tarde na cena, mas eu definitivamente recomendaria usar a estrutura Bowler para a criação de APIs REST. É pequeno, direto e suporte de conversão automática de classe de caso!

cracked_all
fonte