Khung Scala cho Máy chủ API Rest? [đóng cửa]


105

Chúng tôi đang suy nghĩ về việc chuyển Máy chủ Rest API của mình (nó nằm trong dịch vụ web, trên Symfony PHP) sang Scala vì một số lý do: tốc độ, không tốn chi phí, ít CPU hơn, ít mã hơn, khả năng mở rộng, v.v. Tôi không biết Scala cho đến khi vài những ngày trước nhưng tôi đã thích thú với những gì tôi đã học được những ngày này với cuốn sách Scala và tất cả các bài đăng và câu hỏi trên blog (nó không quá xấu xí!)

Tôi có các tùy chọn sau:

  • xây dựng Máy chủ API Rest từ đầu
  • sử dụng một khung công tác web Scala nhỏ như Scalatra
  • sử dụng thang máy

Một số thứ mà tôi sẽ phải sử dụng: HTTP request, JSON output, MySQL (data), OAuth, Memcache (cache), Logs, File uploads, Stats (có thể là Redis).

Bạn muốn giới thiệu điều gì?

Câu trả lời:


87

Không theo thứ tự đặc biệt:


1
cảm ơn! Tôi sẽ kiểm tra AKKA, vì nó có vẻ rất nhẹ và có thể mở rộng
fesja

1
NB Tôi hy vọng ai đó sẽ tích hợp hoặc chuyển restfulie.caelum.com.br sang Scala. Một lựa chọn bây giờ là sử dụng Restfulie làm giao diện người dùng cho Scala trên JRuby.
oluies

3
+1, Tôi sử dụng Akka tại nơi làm việc để cấp nguồn cho máy chủ API hiệu suất cao. Nhược điểm của việc sử dụng JAX-RS với Akka là JAX-RS chứa rất nhiều đặc điểm riêng của Java không phù hợp lắm với một dự án thuần Scala. Tuy nhiên, Akka làm cho toàn bộ thỏa thuận đáng giá.
Tối đa A.

2
Akka là một lựa chọn tốt. Nếu bạn đang phục vụ JSON, hãy xem Lift JSON. Bạn có thể kết hợp và kết hợp, không có vấn đề.
andyczerwonka

1
@santiagobasult Tôi sẽ nói rằng Play! 2.0 và Play-mini! 2.0 đã xảy ra
oluies Ngày

22

Tôi sẽ giới thiệu Unfiltered . Đó là một khung công tác Web thành ngữ hoạt động theo "cách của Scala" và rất đẹp.


15

Hãy xem Xitrum (tôi là tác giả của nó), nó cung cấp mọi thứ bạn đã liệt kê. Tài liệu của nó khá rộng rãi. Từ README:

Xitrum là một khung công tác web Scala không đồng bộ và phân cụm và máy chủ web trên Netty và Hazelcast:

  • Chú thích được sử dụng cho các tuyến URL, theo tinh thần của JAX-RS. Bạn không cần phải khai báo tất cả các tuyến đường ở một nơi duy nhất.
  • Async, theo tinh thần của Netty.
  • Các phiên có thể được lưu trữ trong cookie hoặc Hazelcast theo nhóm.
  • Bộ nhớ đệm trong quá trình và bộ đệm theo cụm, bạn không cần các máy chủ bộ đệm riêng biệt.
  • Comet đang trong quá trình và theo cụm, bạn không cần một máy chủ Comet riêng biệt.

7

Tôi sẽ thêm hai tùy chọn nữa: akka với hỗ trợ JAX-RS tích hợp sẵn và chỉ cần sử dụng trực tiếp JAX-RS (có thể là triển khai Jersey). Mặc dù được cho là ít "Scala-y" hơn những người khác (dựa vào chú thích để liên kết các tham số và đường dẫn), JAX-RS là một niềm vui khi sử dụng, giải quyết rõ ràng tất cả các vấn đề của mã hóa dịch vụ web với dấu chân tối thiểu. Tôi chưa sử dụng nó qua akka, tôi dự đoán nó sẽ rất xuất sắc ở đó, có được khả năng mở rộng ấn tượng thông qua việc triển khai dựa trên liên tục của nó.


cảm ơn! Tôi sẽ kiểm tra AKKA với JAX-RS là @Brent và bạn đã nói. Nó thực sự có vẻ rất nhẹ với dấu chân tối thiểu, điều này thực sự quan trọng đối với một API, nếu bạn muốn đi thật nhanh.
fesja

1
Bạn sẽ phải sử dụng JAX-RS 2.0 (hiện đang là phiên bản beta) để có được khả năng mở rộng vì các phiên bản cũ hơn dựa trên threadlocal khó chịu (không hỗ trợ tạm dừng và tiếp tục luồng).
Adam Gent

4

Hãy xem Finch , một thư viện tổ hợp Scala để xây dựng các dịch vụ HTTP Finagle . Finch cho phép bạn xây dựng các điểm cuối HTTP phức tạp từ số lượng các khối cơ bản được xác định trước. Tương tự như các tổ hợp phân tích cú pháp, các điểm cuối Finch dễ dàng sử dụng lại, soạn thảo, kiểm tra và suy luận.


3

Tất cả các câu trả lời tốt cho đến nay. Một điểm ưu tiên của Lift là RestHelper , có thể giúp bạn viết các phương thức API ngắn gọn và thanh lịch khá dễ dàng. Ngoài ra, tất cả những điều bạn muốn làm phải được thực hiện khá dễ dàng trong Lift. Điều đó đang được nói, Memcache có thể không cần thiết.


cảm ơn! tại sao bạn không nghĩ rằng memcache là cần thiết? Tất nhiên điều đó phụ thuộc, nhưng chúng tôi có một số truy vấn rất có thể được thực hiện liên tục, vì vậy đã đến lúc chúng tôi giành chiến thắng và ít tải hơn trên cơ sở dữ liệu.
fesja

Tôi thực sự không hiểu những gì David Pollak đã nói ngày hôm qua. Về cơ bản, bộ nhớ đệm trong Lift loại bỏ nhiều trường hợp sử dụng của memcache. Dưới đây là thông điệp của mình và có một vài bài viết khác trong thread về memcache: groups.google.com/group/scala-base/msg/4b11cbd357bfecf0
pr1001

2

Hiện trường hơi muộn nhưng tôi chắc chắn khuyên bạn nên sử dụng khung Bowler để tạo API REST. Nó nhỏ, đến thời điểm và hỗ trợ chuyển đổi lớp trường hợp tự động!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.