Kerangka Scala untuk Rest API Server? [Tutup]

105

Kami berpikir untuk memindahkan Rest API Server kami (ada di dalam layanan web, pada Symfony PHP) ke Scala karena beberapa alasan: kecepatan, tidak ada overhead, CPU lebih sedikit, kode lebih sedikit, skalabilitas, dll. Saya tidak tahu Scala sampai beberapa beberapa hari yang lalu tetapi saya menikmati apa yang telah saya pelajari akhir-akhir ini dengan buku Scala dan semua posting blog serta pertanyaan (tidak terlalu jelek!)

Saya memiliki opsi berikut:

  • membangun Rest API Server dari awal
  • menggunakan kerangka kerja web Scala kecil seperti Scalatra
  • gunakan Lift

Beberapa hal yang harus saya gunakan: Permintaan HTTP, output JSON, MySQL (data), OAuth, Memcache (cache), Logs, File uploads, Stats (mungkin Redis).

Apa yang akan Anda rekomendasikan?

fesja
sumber

Jawaban:

87

Tanpa urutan tertentu:

oluies
sumber
1
Terima kasih! Saya akan memeriksa AKKA, karena tampaknya sangat ringan dan terukur
fesja
1
NB Saya berharap seseorang bisa melakukan integrasi atau porting memindahkan restfulie.caelum.com.br ke Scala. Salah satu pilihan sekarang adalah menggunakan Restfulie sebagai antarmuka untuk Scala di JRuby.
oluies
3
+1, Saya menggunakan Akka di tempat kerja untuk menjalankan server API berkinerja tinggi. Kelemahan menggunakan JAX-RS dengan Akka adalah bahwa JAX-RS hadir dengan banyak keistimewaan Java yang tidak sesuai dengan proyek Scala murni. Tetap saja, Akka membuat seluruh kesepakatan itu sepadan.
Max A.
2
Akka adalah pilihan yang bagus. Jika Anda melayani JSON, lihat Lift JSON. Anda bisa mencampur dan mencocokkan, tidak masalah.
andyczerwonka
1
@santiagobasult Saya akan mengatakan bahwa Play! 2.0 dan Play-mini! 2.0 terjadi
oluies
22

Saya akan merekomendasikan Unfiltered . Ini adalah kerangka kerja web idiomatik yang melakukan sesuatu dengan "cara Scala" dan sangat indah.

Max A.
sumber
15

Lihatlah Xitrum (saya penulisnya), ini menyediakan semua yang Anda daftarkan. Dokumennya cukup luas. Dari README:

Xitrum adalah kerangka kerja web dan server web Scala asinkron dan berkerumun di atas Netty dan Hazelcast:

  • Anotasi digunakan untuk rute URL, dalam semangat JAX-RS. Anda tidak perlu mendeklarasikan semua rute di satu tempat.
  • Async, dalam semangat Netty.
  • Sesi dapat disimpan dalam cookie atau Hazelcast yang dikelompokkan.
  • Cache dalam proses dan berkerumun, Anda tidak memerlukan server cache terpisah.
  • Komet dalam proses dan berkerumun, Anda tidak memerlukan server Comet terpisah.
Ngoc Dao
sumber
7

Saya akan menambahkan dua opsi lagi: akka dengan dukungan JAX-RS built-in, dan hanya menggunakan JAX-RS secara langsung (mungkin implementasi Jersey). Meskipun bisa dibilang kurang "Scala-y" daripada yang lain (mengandalkan anotasi untuk mengikat parameter dan jalur), JAX-RS sangat menyenangkan untuk digunakan, dengan rapi menyelesaikan semua masalah pengkodean layanan web dengan jejak minimal. Saya belum menggunakannya melalui akka, saya akan mengantisipasinya menjadi sangat baik di sana, mendapatkan skalabilitas yang mengesankan melalui implementasi berbasis kelanjutannya.

Dave Griffith
sumber
Terima kasih! Saya akan memeriksa AKKA dengan JAX-RS sebagai @Brent dan Anda berkata. Tampaknya sangat ringan dengan footprint minimal yang sangat penting untuk API, jika Anda ingin melakukannya dengan sangat cepat.
fesja
1
Anda harus menggunakan JAX-RS 2.0 (yang saat ini beta) untuk mendapatkan skalabilitas karena versi yang lebih lama mengandalkan threadlocal yang buruk (yaitu thread berhenti dan melanjutkan tidak didukung).
Adam Gent
4

Lihat Finch , pustaka kombinator Scala untuk membuat layanan HTTP Finagle . Finch memungkinkan Anda membuat titik akhir HTTP yang kompleks dari jumlah blok dasar yang telah ditentukan sebelumnya. Mirip dengan kombinator parser, titik akhir Finch mudah digunakan kembali, dibuat, diuji, dan ditimbang.

Vladimir Kostyukov
sumber
3

Semua jawaban bagus sejauh ini. Satu hal yang disukai Lift adalah RestHelper - nya , yang membuatnya cukup mudah untuk menulis metode API yang singkat dan elegan. Selain itu, semua hal lain yang ingin Anda lakukan harus cukup jelas untuk diterapkan di Lift. Karena itu, Memcache mungkin tidak diperlukan.

pr1001
sumber
Terima kasih! mengapa menurut Anda memcache tidak diperlukan? Itu tentu saja tergantung, tetapi kami memiliki beberapa pertanyaan yang sangat mungkin dilakukan terus-menerus, jadi inilah saatnya kami menang dan lebih sedikit memuat pada database.
fesja
Saya benar-benar baru saja mengucapkan apa yang dikatakan David Pollak kemarin. Pada dasarnya, caching dalam Lift menghapus banyak kasus penggunaan memcache. Ini pesannya dan ada beberapa pos lain di utas tentang memcache: groups.google.com/group/scala-base/msg/4b11cbd357bfecf0
pr1001
2

Sedikit terlambat di tempat kejadian tetapi saya pasti akan merekomendasikan menggunakan kerangka kerja Bowler untuk pembuatan REST API. Ini kecil, to the point dan dukungan konversi kelas kasus otomatis!

cracked_all
sumber