Scala для сервера API Rest?

Мы думаем о переносе нашего сервера API доступа (он находится в веб-сервисе на Symfony PHP) на Scala по нескольким причинам: скорость, отсутствие накладных расходов, меньше процессора, меньше кода, масштабируемость и т.д. t знать Scala до нескольких дней назад, но мне понравилось то, что я изучал в эти дни с помощью книги Scala и всех сообщений в блоге и вопросов (это не так уродливо!)

У меня есть следующие опции:

  • создать API-интерфейс Rest API с нуля
  • используйте крошечную веб-инфраструктуру Scala, например Scalatra
  • использовать лифт

Некоторые вещи, которые мне придется использовать: HTTP-запросы, вывод JSON, MySQL (данные), OAuth, Memcache (кеш), журналы, загрузки файлов, статистика (возможно, Redis).

Что вы порекомендовали бы?

Ответ 2

Я порекомендую Unfiltered. Это идиоматическая веб-структура, которая делает вещи "способом Scala" и очень красива.

Ответ 3

Взгляните на Xitrum (я его автор), он предоставляет все, что вы указали. Его документ довольно обширен. Из README:

Xitrum - это асинхронная и кластерная веб-фреймворк Scala и веб-сервер поверх Netty и Hazelcast:

  • Аннотации используются для URL-маршрутов в духе JAX-RS. Вам не нужно объявлять все маршруты в одном месте.
  • Async, в духе Netty.
  • Сессии могут храниться в файлах cookie или кластеризованных Hazelcast.
  • В процессе работы и кластеризованном кеше вам не нужны отдельные серверы кешей.
  • В процессе работы и кластеризации Comet вам не нужен отдельный сервер Comet.

Ответ 4

Я бы добавил еще два варианта: akka со встроенной поддержкой JAX-RS и просто с использованием JAX-RS напрямую (возможно, реализация в Джерси). Хотя, возможно, меньше "Scala -y", чем другие (опираясь на аннотации для привязки параметров и путей), JAX-RS - это радость в использовании, чистое решение всех проблем кодирования веб-сервисов с минимальным размером. Я не использовал его с помощью akka, я ожидал бы, что он будет превосходным там, получая впечатляющую масштабируемость благодаря его реализации на основе продолжения.

Ответ 5

Взгляните на Finch, библиотеку комбинаторов Scala для построения Finagle HTTP-службы. Finch позволяет создавать сложные конечные точки HTTP из числа предопределенных базовых блоков. Точно так же, как и комбинаторы парсеров, конечные точки Finch легко повторно использовать, компилировать, тестировать и рассуждать.

Ответ 6

Все хорошие ответы. Один момент в пользу "Поддержки" - это RestHelper, что позволяет легко писать короткие, элегантные методы API. Кроме того, все другие вещи, которые вы хотите сделать, должны быть достаточно простыми для внедрения в Lift. При этом Memcache может не понадобиться.

Ответ 7

Немного поздно на сцене, но я определенно рекомендую использовать Bowler для создания REST API. Это небольшая, точная и автоматическая поддержка преобразования класса case!