2010-09-09 21 views
95

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

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

  • xây dựng Rest API Server từ đầu
  • sử dụng một khung web Scala nhỏ như Scalatra
  • .210
  • sử dụng Lift

Một số điều mà tôi sẽ phải sử dụng: HTTP yêu cầu, JSON đầu ra, MySQL (dữ liệu), OAuth, Memcache (cache), Logs, tải tập tin, thống kê số liệu (có thể Redis).

Bạn sẽ đề xuất điều gì?

Trả lời

79

Trong mọi thứ tự cụ thể:

+1

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

+1

N.B Tôi hy vọng một người nào đó được xung quanh tích hợp hoặc porting http://restfulie.caelum.com.br/ để Scala. Một lựa chọn bây giờ là sử dụng Restfulie như một lối vào 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 có rất nhiều tính năng đồng bộ hóa Java không phù hợp với dự án Scala thuần túy. Tuy nhiên, Akka làm cho toàn bộ thỏa thuận đáng giá. –

22

Tôi sẽ giới thiệu Unfiltered. Đó là một khuôn khổ Web thành ngữ làm mọi thứ "con đường Scala" và rất đẹp.

7

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

+0

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

+1

Bạn sẽ phải sử dụng JAX-RS 2.0 (hiện tại 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 (đó là tạm dừng luồng và tiếp tục không được hỗ trợ). –

3

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

+0

cảm ơn! tại sao bạn không nghĩ memcache là cần thiết? Nó phụ thuộc tất nhiên, nhưng chúng tôi có một số truy vấn rất có khả năng được thực hiện liên tục, do đó, đó là thời gian chúng tôi giành chiến thắng và ít tải trên cơ sở dữ liệu. – fesja

+0

Tôi thực sự chỉ cần đi ra khỏi những gì David Pollak cho biết 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 memcache. Đây là thông điệp của anh ấy và có một số bài đăng khác trong chuỗi về memcache: http://groups.google.com/group/scala-base/msg/4b11cbd357bfecf0 – pr1001

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ê. Its doc khá rộng.Từ README:

Xitrum là một async và cụm Scala khuôn khổ web và máy chủ web trên đầu trang của Netty và Hazelcast:

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

Một chút muộn trong cảnh nhưng tôi chắc chắn sẽ khuyên bạn nên sử dụng khuôn khổ Bowler để tạo REST API. Nó nhỏ, đến điểm và hỗ trợ chuyển đổi lớp trường hợp tự động!

4

Hãy xem Finch, thư viện tổ hợp Scala để xây dựng các dịch vụ Finagle HTTP. Finch cho phép bạn xây dựng các điểm cuối HTTP phức tạp trong số các khối cơ bản được xác định trước. Tương tự như các trình kết hợp phân tích cú pháp, các điểm cuối của Finch rất dễ sử dụng lại, soạn, kiểm tra và lý do.

Các vấn đề liên quan