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

99

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

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

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

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

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

Теги:
rest
lift

7 ответов

76
Лучший ответ

Без особого порядка:

  • 1
    Спасибо! Я проверю АККА, так как она кажется очень легкой и масштабируемой
  • 1
    NB. Я надеюсь, что кто-нибудь сможет интегрировать или портировать restfulie.caelum.com.br в Scala. Одним из вариантов сейчас является использование Restfulie в качестве интерфейса для Scala на JRuby.
Показать ещё 12 комментариев
23

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

15

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

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

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

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

  • 0
    Спасибо! Я проверю AKKA с JAX-RS как @Brent, и вы сказали. Это действительно кажется очень легким с минимальной занимаемой площадью, что очень важно для API, если вы хотите работать очень быстро.
  • 1
    Вам придется использовать JAX-RS 2.0 (который в настоящее время является бета-версией), чтобы получить масштабируемость, так как более старые версии полагаются на неприятный локальный поток (то есть приостановка потока и возобновление не поддерживаются).
4

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

3

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

  • 0
    Спасибо! почему вы не думаете, что memcache необходим? Конечно, это зависит, но у нас есть несколько запросов, которые, скорее всего, будут выполняться постоянно, поэтому пришло время побеждать и меньше загружать базу данных.
  • 0
    Я действительно просто ухожу от того, что сказал вчера Дэвид Поллак. По сути, кэширование в Lift удаляет много вариантов использования memcache. Вот его сообщение, и есть еще несколько сообщений в теме о memcache: groups.google.com/group/scala-base/msg/4b11cbd357bfecf0
2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню