2009-05-21 31 views
6

Chúng tôi đang xây dựng một API RESTful cho công ty của chúng tôi, sẽ cung cấp XML, JSON và các loại nội dung có khả năng khác.Khung ứng dụng web được tài liệu hóa, ổn định, an toàn và có khả năng mở rộng là gì?

đội Mỹ đang tìm cách để tìm ra một khuôn khổ đó là (Theo thứ tự ưu tiên):

  1. Vâng dự liệu
    • Lý tưởng nhất là với hướng dẫn tốt, và một cộng đồng thịnh vượng và knowledgebase
  2. Theo dõi các mẫu thiết kế hợp lý
    • Chủ yếu chúng tôi muốn bao gồm ency trong khuôn khổ. Quy ước đặt tên không thay đổi dựa trên phương thức gọi bạn đang gọi.
  3. an toàn
    • Tập trung vào buộc các nhà phát triển để thực hiện một số hình thức xác nhận của GET, POST, PUT và DELETE Biến
  4. Ổn
    • phần của điều này là sự trưởng thành, theo nghĩa là khung không thay đổi quá thường xuyên
    • phần khác là một danh sách lỗi cũng ghi nhận mà không phải là scarily khổng lồ
  5. Scalable/Hiệu suất Oriented
    • Chúng tôi có hơn 50K người dùng yêu cầu sẵn sàng cao đáng kể trên toàn thế giới. NẾU ứng dụng của chúng tôi đi xuống, mọi người không có internet trong nhà của họ. Vì vậy, đó là một môi trường rất quan trọng.
    • Lý tưởng nhất là chúng tôi có thể khởi chạy cùng một codebase trên 10 máy chủ và chỉ tiếp tục thêm các bộ tải trọng. Chúng tôi không muốn phải xác định những máy chủ là trên đó phương pháp ....
  6. Tích hợp tốt với Linux/MySQL Môi trường
    • Chúng tôi không có một máy chủ MS duy nhất. Chúng tôi không thay đổi điều đó. Rất tiếc .Net người hâm mộ :-D

Tôi nhận ra điều này là một mục tiêu mơ hồ. Sẽ không có một khuôn khổ nào đáp ứng tất cả những nhu cầu này, trên thực tế có thể sẽ có nhiều khuôn khổ đáp ứng chúng theo nhiều cách, hình dạng và hình thức khác nhau.

Đây là ngôn ngữ độc lập. Chúng tôi đã có kinh nghiệm về PHP, nhưng chúng tôi cũng có các nhà phát triển chưa bao giờ viết một ứng dụng web trong cuộc sống của họ, vì vậy việc học Python hoặc Ruby hoặc Java là chấp nhận được.

+7

trước khi flamewar. Ngoài ra, wiki. – Will

+0

Danh sách đó có theo thứ tự ưu tiên không? Ngoài ra, bạn sẽ đo lường một số trong số đó như thế nào, ví dụ: điều gì làm cho mô hình sử dụng hợp lý? –

+2

Tôi bỏ phiếu để đóng ... –

Trả lời

5

Tôi sẽ đi ra ngoài một chi ở đây và đề xuất Ruby với Sinatra.

Tại sao?

  1. Sinatra không được "tài liệu kỹ lưỡng" nhưng được "ghi lại tốt". Xem xét nó đơn giản hơn nhiều so với các khung công tác khác, không cần phải có quá nhiều tài liệu, và vì nó được xây dựng trên Rack như một máy chủ web, nó chia sẻ một số tài liệu chung với điều đó. Nhưng những gì bạn cần biết là trên trang web, và nó cũng được viết và không chứa lỗi mà tôi đã tìm thấy (IE, nó là tất cả đến nay).

    Hầu hết những gì bạn cần biết là trong số Sinatra Book, ReadmeFAQ. Mặc dù tính chất công việc đang tiến triển của cuốn sách, nội dung của nó rất chính xác và hữu ích. Và, nếu bạn vẫn còn mắc kẹt với các câu hỏi, hãy ghé qua phòng chat IRC freenode.net # sinatra.

  2. Sinatra có khả năng được sử dụng trong phương pháp logic dựa trên chức năng/tuyến đường hoặc bằng cách ghi đè đối tượng Sinatra :: Application. Bạn có thể sử dụng một trong hai, tách logic và phương thức của bạn thành các tệp khác nhau hoặc giữ tất cả trong một tệp. Tuỳ bạn.

  3. Sinatra, tự nó, an toàn. Bạn PHẢI xác thực tất cả các biến được gửi bởi người dùng, bởi vì ngoài việc phân tích cú pháp chúng và chuyển chúng cho bạn, Sinatra không quan tâm nó hợp lệ như thế nào. Vì vậy, bạn hoặc thực thi hiệu lực của các biến của bạn hoặc bạn hối tiếc. ;-)

  4. Sinatra không thay đổi trong bốn tháng qua, nhưng chắc chắn đã có bảo trì và cập nhật nhỏ. Ngoài ra, tôi đã không tìm thấy danh sách lỗi lớn hoặc đe dọa. Nó có hầu như mọi thứ tôi cần để xây dựng ứng dụng của mình.

  5. Sinatra không phải được triển khai với Hành khách, nhưng có thể dễ dàng được tùy chỉnh phù hợp để nhanh chóng. Nếu bạn sử dụng những thứ như Enterprise RubyThin, bạn có thể ủy quyền cho Nginix hoặc LightHTTPd. Nếu bạn lấy hai máy chủ, bạn có thể tạo một máy chủ chính (với proxy và một số luồng) và máy chủ cơ sở dữ liệu thứ hai (với MySQL và một số luồng) và để chúng mất. Bằng cách này, các tác vụ được lan truyền trên các máy chủ. Nó sẽ cung cấp cho bạn nhiều quyền kiểm soát hơn tôi nghĩ rằng Hành khách sẽ. (Chưa kể đến hiệu suất tốt hơn.)

    Tôi tìm Hành khách (trên Dreamhost) để cung cấp hiệu suất tương đối kém khi so sánh với chủ đề đang chạy bằng Rack, Mongrel hoặc Thin. Điều đó nói rằng, một khi tải các ứng dụng được đáp ứng ngay cả trong môi trường đó. Nếu tôi dự đoán nó, bạn sẽ không gặp vấn đề với việc mở rộng quy mô ứng dụng vì bạn chỉ cần triển khai lại mã của mình và khởi động lại các chủ đề – không có gì không thể đưa vào Capistrano.

  6. Ruby trên Linux nhanh và không phải là vấn đề để triển khai. MySQL với Ruby đủ dễ dàng và có một số gói ORM thực sự tốt có sẵn như ActiveRecordSequel. Sinatra sẽ không khiến bạn chọn cái mà bạn ghét.

Ngoài câu trả lời cho câu hỏi của bạn, tôi còn một vài lý do nữa.

  1. Sinatra có đường cong học tập dễ dàng và rất dễ nhận. Vấn đề lớn nhất mà tôi gặp phải là đưa nó lên máy chủ Dreamhost của tôi vì Rack là một phiên bản cũ hơn, nhưng với một phiên bản bị bỏ qua của Rack, vấn đề biến mất. Nếu có thể, tôi sẽ viết lại dự án Rails mới nhất của mình ở Sinatra với ActiveRecord để bảo trì dễ dàng; quá nhiều nỗ lực đã được chi tiêu trong nó rồi.

    Nhờ tính dễ sử dụng và dễ học, tôi thấy mình có năng suất cao hơn ở Sinatra mà không có trình tạo mã hơn trong Rails với tất cả các trình tạo mã. Và đó là nói điều gì đó.

  2. Sinatra hỗ trợ phần mềm trung gian cho Rack và do đó rất linh hoạt trong những gì bạn có thể làm với nó.

  3. Nếu tôi được trung bình ra sự hữu ích của cộng đồng Sinatra, trên IRC, tôi muốn nói rằng họ đang hiểu biết nhiều hơn về khuôn khổ hơn người sử dụng Rails trung bình – cũng giống như so sánh lướt qua. Lý do là Rails dễ tiếp cận hơn với người mới và những người không có lập trình kinh doanh.

  4. Sinatra sẽ hỗ trợ Ruby 1.9. Tôi vẫn không hoàn toàn chắc chắn rằng có bao nhiêu hỗ trợ cho 1.9 có hiện tại ở Sinatra, nhưng tôi biết họ ban đầu đang chờ đợi trên Rack. As of April 25 điều này không còn là vấn đề, vì vậy có lẽ Sinatra đã được chuẩn bị cho 1,9; Tôi biết một sự kiện 1.9 hỗ trợ là trong các đường ống cho giữa năm 2009, nhưng tôi không biết bao lâu sẽ được.

    Giả sử bạn có thể đưa Sinatra làm việc với Ruby 1.9 một chút (phiên bản 0.9.2 đã hỗ trợ Rack 1.0 và proxy 1.9 trong mã của Rack), trước phiên bản 1.0 với hỗ trợ 1.9, hiệu suất của bạn trên Ruby bên sẽ là sao. Ngay cả khi bạn không thể, thì Enterprise Ruby sẽ giúp tốc độ.

+0

Grr, tôi không thể sửa liên kết. Tin nhắn của tôi đang bị giết bởi MỘT liên kết sai trái! –

+0

Gần đây tôi đã yêu Sinatra. Cảm ơn vì tiền hỗ trợ :). Hoàn hảo cho khung công tác REST! –

0

Tôi đoán nếu có một khung như vậy, nó sẽ là một và duy nhất.

+0

Tôi nghĩ rằng việc chống phiếu bầu là khắc nghiệt: Tôi đồng ý rằng nếu có một sự lựa chọn rõ ràng thì nó sẽ là một lựa chọn rõ ràng . – annakata

+0

@Arnis L., tôi đồng ý –

+3

Có một câu hỏi, tôi đã đưa ra một câu trả lời tôi tin vào. Tôi không yêu cầu bỏ phiếu, nhưng tôi không thấy điểm xuống bình chọn câu trả lời của tôi ... :) –

1

Hãy thử tất cả để tìm ra câu trả lời đúng!

Vâng, những người sẽ đề xuất 'một khuôn khổ để thống trị tất cả' sẽ không thử tất cả!

0

Đối với PHP, tôi yêu khung công tác Zend (tuy nhiên, đối với tôi nó không thực sự là một khung công tác). Một trong những tính năng tốt nhất của nó là mỗi thành phần độc lập với những người khác ... Vì vậy, nếu có một phần nào đó bạn không thích, chỉ cần không sử dụng nó. Ngoài ra, bạn đề cập đến JSON ... Zend hỗ trợ đầy đủ JSON theo cả hai hướng ....

0

Ruby on Rails được ghi nhận rất nhiều plugin và đã được thử nghiệm ở khả năng mở rộng (xem BaseCamp và các giải pháp khác được thực hiện trong đường ray)

0

Nếu bạn đang cân nhắc Java tôi muốn giới thiệu Jersey, nó hoạt động tuyệt vời và tôi nghĩ rằng nó đạt đến tất cả các bạn 5 bàn thắng ...

0

Nhìn vào danh sách các ưu tiên thật khó để nói rằng bất kỳ một tuyến đường là "đúng" cách để đi. Về phía PHP, tôi đã dành một lượng thời gian đáng kể với CakePHP, điều này hoàn thành phần lớn những gì bạn đang tìm kiếm. Nhưng là một người ghét PHP tôi sẽ đề nghị chỉ đạo rõ ràng bất cứ điều gì trong lĩnh vực đó.

Đó là tất cả về phong cách và trải nghiệm. Tôi đã sử dụng Ruby On Rails, không phải là ngôn ngữ thanh lịch nhất nhưng nó thực hiện công việc đặc biệt tốt. Nó đã không trưởng thành nhiều bằng cách sử dụng một ngăn xếp Spring/Hibernate trên Java hoặc sử dụng .Net xử lý hầu như tất cả mọi thứ thẳng ra khỏi hộp, nhưng nó thực hiện công việc đặc biệt tốt. Tôi thích các dự án dựa trên Java/.Net vì nó phù hợp hơn nhiều với cách tôi muốn lập trình.

Không có câu trả lời "đúng", chỉ có rất nhiều câu trả lời hay. ASP.Net MVC ví dụ là một lựa chọn tốt. Mãi mãi trước đây tôi đã sử dụng Spring on Java, cũng khá hiệu quả khi hoàn thành công việc. Ngay cả PHP cũng không phải là một lựa chọn sai lầm. Ruby On Rails, mà tôi đã chỉ thực hiện hai dự án với, rất dễ dàng để nhận và nó làm cho một số nhiệm vụ khá phức tạp trong các ngôn ngữ khác khá đơn giản.

3

Vâng. Khả năng mở rộng là không có gì dễ dàng để có được. Đối với thời gian phản hồi giống như Google, bạn cần một cái gì đó như MapReduce. Được. Đừng tự nhủ, siêu khả năng mở rộng là không có gì cho người mới bắt đầu.

Đối với tất cả các điểm khác, Seaside rõ ràng là tốt nhất. Vì lý do bảo mật, hãy xem seaside.st để xem lý do tại sao nó an toàn hơn tất cả các khung công tác khác mà tôi biết (bao gồm cả Rails và Seam, ví dụ). Bên bờ biển là một tài liệu hợp lý, nhưng cũng nhìn vào bên trong bờ biển rất dễ dàng và thuận tiện, hầu như không có câu hỏi nào vẫn mở cho cộng đồng để trả lời, mà nó thường nhanh. Bờ biển đã ổn định trong nhiều năm nay, vì vậy tôi nghĩ bạn sẽ ổn với điều đó.

Để định hướng hiệu suất: Chạy Seaside thương mại, GLASS và bạn sẽ nhận được hiệu suất tuyệt vời so với thiết lập LAMP giống như giải pháp cơ sở dữ liệu nhanh hơn nhiều. nhận được rất nhiều tốc độ.

Bên bờ biển được kiến ​​trúc rất tốt nên nhiều người thấy viết ứng dụng Seaside dễ dàng hơn các ứng dụng dành cho máy tính để bàn. Hãy thử nó, bạn sẽ thích nó.

PS: Đối với hồ sơ, Seaside không phải là RESTful.

4

Cả hai Django và Rails đến khá gần để phù hợp với hầu hết các tiêu chí của bạn, ngoại trừ tôi nghĩ rằng tài liệu của Django là cách tốt hơn so với Ruby on Rails '; tài liệu cho Django là không có gì ngắn của tuyệt vời (và tôi không phải là hyperbolic ở đây).

Tôi không biết về khả năng mở rộng của Django. Tôi biết Rails quy mô khá tốt (lên đến một điểm), nhưng tôi không biết nếu như vậy có thể nói của Django. (Tôi không nói rằng nó không thể; Tôi chỉ nói rằng tôi thật không biết , như tôi chưa bao giờ viết một lớn ứng dụng sử dụng Django.)

Django cũng có một số pony, trong trường hợp bạn cũng thầm mong muốn điều đó.

+2

Trên thực tế, khả năng mở rộng Rails được đặt câu hỏi rộng rãi. Django có một kỷ lục tốt hơn về khía cạnh này; nhưng bất kỳ khung nào chắc chắn đều có 'bức tường' tại một điểm nhất định. – Javier

+0

Đó là lý do tại sao tôi nói "lên đến một điểm", mặc dù tôi nghĩ rằng "tai ương khả năng mở rộng" của Rails là overhyped. Đối với phần lớn các trang web, thậm chí các trang web lớn, nó vẫn ổn. Vấn đề của Twitter với Ruby đã nhận được rất nhiều sự chú ý, nhưng Twitter cũng có một số công cụ back-end điên rồ xảy ra mà hầu hết các trang web không phải đối phó với (ngay cả những cái lớn). – mipadi

+0

+1 cho ngựa (và cũng được thực hiện điểm) – annakata

0

Tôi nghĩ rằng đối với khối lượng tuyệt đối của tài liệu bạn không thể đánh bại J2EE. Nó cũng được cho là có khả năng mở rộng và ổn định.

Bây giờ, từ đó đến thực sự là mong muốn ....

2

Bạn có thể xem Django, Python framwork. Đó là một khuôn khổ tài liệu rất tốt, nó có một giao diện quản trị CRUD tự động trên cơ sở dữ liệu và nó cũng có một cuốn sách trực tuyến miễn phí, tất nhiên bạn có thể mua cho thật :)

0

Nếu Java nằm trong bộ công cụ của bạn, hãy xem .

Đá ổn định, nhiệt tình, mặc dù không có cộng đồng lớn ngoạn mục. Tài liệu tốt, một số lỗi thời được cấp, nhưng hệ thống này rất ổn định ngay cả khi "những thứ cũ" có liên quan. Một cuốn sách thật hay, gần đây (cuối năm ngoái). Sọc nhỏ đủ để cuốn sách có thể, và làm, "che đậy mọi thứ".

Đó là một khung hành động, không làm được gì nhiều trong khu vực trình bày (lưu cho biểu mẫu, chủ yếu và có cơ sở bố cục/bố cục hoàn toàn tùy chọn). Bạn có thể sử dụng JSP hoặc FreeMarker, hoặc, thực sự, bất cứ điều gì khác. Nó cũng có thể làm các dịch vụ web (mặc dù không phải cũng như một cái gì đó như Jersey).

Đó là kết thúc ngược lại thuyết bất khả tri, nhưng có một dự án tích hợp JPA cho nó.

Cuối cùng, bạn có thể tận dụng, nếu bạn thích, tất cả các bộ Java/Java EE khác nếu bạn muốn. Vì Stripes không tiêu thụ toàn bộ stack, bạn có rất nhiều tính linh hoạt để chọn và chọn các phần bạn muốn. Đầy đủ thuyền Java EE, Giao dịch, Đậu phiên, JMS. Làm việc với Spring (nó là "có ý thức" của Spring và có tích hợp tốt) JPA, iBatis, Hibernate, JDBC thô, Lucene, JSR-170 Content Repository, bất cứ điều gì.

Đây là một bộ công cụ tuyệt vời.

-1

Hãy thử cppcms

nó là một hiệu suất cao Web Khung Phát triển

0

Đối với một câu trả lời năm 2014, tôi muốn giới thiệu Laravel/Slim Framework (PHP), Ruby on Rails/Sinatra (Ruby), Django/Flask (Python), Grails (Groovy, ngôn ngữ dựa trên JVM), Chơi! Khung (Java/Scala) hoặc Sails.js/Kraken.js (Javascript).

Trường hợp khung công tác đầu tiên được đề cập lớn hơn một chút và khung thứ hai nhỏ hơn một chút đối với các ngôn ngữ mà tôi đề cập đến 2 khung với việc sử dụng "/".

Tôi hy vọng điều này sẽ giúp mọi người có câu hỏi tương tự 5 năm sau đó.

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