2010-09-09 2 views
95

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

у меня есть следующие варианты:

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

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

Что вы посоветуете?

ответ

79

В частности, нет порядка:

+1

спасибо! Я проверю AKKA, поскольку он кажется очень легким и масштабируемым. – fesja

+1

N.B Я надеюсь, что кто-то обойдет интеграцию или портирование http://restfulie.caelum.com.br/ в Scala. Один из вариантов теперь использует Restfulie в качестве интерфейса Scala на JRuby. – oluies

+3

+1, я использую Akka для работы высокопроизводительного сервера API. Недостатком использования JAX-RS с Akka является то, что JAX-RS поставляется с множеством особенностей Java, которые не очень хорошо вписываются в проект pure-Scala. Тем не менее, Акка делает все дело стоящим. –

22

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

7

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

+0

спасибо! Я проверю AKKA с JAX-RS как @Brent, и вы сказали. Это действительно кажется очень легким с минимальным размером, что действительно важно для API, если вы хотите идти очень быстро. – fesja

+1

Вы должны будете использовать JAX-RS 2.0 (который в настоящее время бета), чтобы получить масштабируемость, поскольку старые версии зависят от противного ThreadLocal (то есть нить и возобновлять не поддерживаются). –

3

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

+0

спасибо! почему вы не думаете, что необходима memcache? Конечно, это зависит, но у нас есть несколько запросов, которые, скорее всего, будут выполняться постоянно, поэтому пришло время выиграть и меньше загружать базу данных. – fesja

+0

Я действительно просто ушел от того, что вчера сказал Дэвид Поллак. В основном, кеширование в Лифте удаляет много случаев использования memcache. Вот его сообщение, и есть несколько других сообщений в теме о memcache: http://groups.google.com/group/scala-base/msg/4b11cbd357bfecf0 – pr1001

15

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

Xitrum является асинхронным и кластерным Scala фреймворк и веб-сервер на вершине Нетти и Hazelcast:

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

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

4

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