views:

701

answers:

12

We are building a RESTful API for our company, which will provide XML, JSON, and potentially other content types.

My team is looking to find a framework which is (In order of priority):

  1. Well Documented
    • Ideally with good tutorials, and a thriving community and knowledgebase
  2. Follows rational design patterns
    • Mostly we want consistency in the framework. Naming conventions that don't change based upon which method call you're calling.
  3. Secure
    • Focused on forcing the developer to perform some form of validation of the GET, POST, PUT and DELETE Variables
  4. Stable
    • Part of this is maturity, in the sense that the framework isn't changing too often
    • The other part is a well documented bug list which isn't scarily huge
  5. Scalable/Performance Oriented
    • We have over 50K users who require significant high availability all around the world. IF our App goes down, people do not have internet in their home. So it's a highly critical environment.
    • Ideally we could launch the same codebase on 10 servers and just keep adding loadbalancers. We don't want to have to define which server is on which methods....
  6. Integrates well with a Linux/MySQL Environment
    • We don't have a single MS server. We're not changing that. Sorry .Net fans :-D

I realize this a nebulous goal. There will not be any one framework that meets all of these needs, in fact there will probably be many that meet them in varying ways, shapes and forms.

This is language independent. We already have experience in PHP, but we also have developers who have never written a web application in their life, so learning Python or Ruby or Java is acceptable.

+1  A: 

I guess if there were such a framework, it would be one and only.

Arnis L.
I think the anti-vote is harsh: I agree that if there was a clear choice then it would be a clear choice.
annakata
@Arnis L., I agree
Amr ElGarhy
There is a question, i gave an answer i believe in. I'm not asking for up votes, but i don't see the point to down vote my answer either... :)
Arnis L.
@arnis - I personally believe downvotes on subjective topics should be disabled but it's not made it through a uservoice vote yet sadly
annakata
@annakata You should propose this idea to stackoverflow team if you haven't done that already.
Arnis L.
A: 

Try them all to find out the correct answer!

Well, the people who will be suggesting 'one framework to rule them all' won't have tried them all either!

Neil Trodden
A: 

For PHP, I've loved the Zend framework (though, to me it is not really a framework). One of it's best features is that each component is independent of the others... So if there is some part of it you don't like, just don't use it. Also, you mention JSON... Zend fully supports JSON in both directions....

dicroce
A: 

Ruby on Rails is vastly documented with loads of plugins and has been tested in scalability already ( see BaseCamp and other solutions made in rails)

Konstantinos
A: 

If you're considering Java I would recommend Jersey, it works great and I think it reaches all you 5 goals...

adrian.tarau
A: 

Looking at your list of priorities it's hard to say that any one route is the "right" way to go. On the PHP side I've spent a significant amount of time with CakePHP which accomplishes much of what you looking for. But being a guy who hates PHP I would suggest steering clear of anything in that realm.

It's all about style and experience. I've used Ruby On Rails, which isn't the most elegant of languages but it does the job exceptionally well. It hadn't matured as much as using a Spring/Hibernate stack on Java or using .Net which handles almost everything straight out of the box, but it does the job exceptionally well. I prefer the Java/.Net based projects because it fits much better with the way I like to program.

There is no "right" answer, just lots of good ones. ASP.Net MVC for example is a good choice. Forever ago I used Spring on Java which was also fairly effective at accomplishing the job. Even PHP is not a wrong choice. Ruby On Rails, which I have only done two projects with, is very easy to pick up and it makes some rather complicated tasks in other languages fairly simple.

thaBadDawg
+3  A: 

Well. Scalability is nothing easy to get. For Google-like response times, you need something like MapReduce. Ok. Don't kid yourself, super-scalability is nothing for beginners.

As for all the other points, Seaside is clearly best. As for security, check out seaside.st to see why it is inherently more secure than all the other frameworks I am aware of (including Rails and Seam, e.g.). Seaside is reasonably well-documented, but also looking at the internals of seaside is so easy and convenient, that hardly a question remains open for the community to answer, which it does fast usually. Seaside has been stable for many years now, so I think you'll be fine with that.

As for Performance oriented: Run the commercial Seaside, GLASS, and you will get stunning performance compared to a LAMP-like setup, due to the much faster database solution that is integrated, and the framework which trades memory for speed and gets a lot of speed.

Seaside is architectured so well that many people find writing Seaside apps easier than desktop applications. Try it out, you'll love it.

PS: For the record, Seaside is not RESTful.

nes1983
+3  A: 

Both Django and Rails come pretty close to fitting most of your criteria, except I think that Django's documentation is way better than that of Ruby on Rails'; the documentation for Django is nothing short of amazing (and I'm not being hyperbolic here).

I don't know about the scalability of Django, though. I know Rails scales pretty well (up to a point), but I don't know if the same can be said of Django. (I'm not saying it can't; I'm just saying that I honestly don't know, as I've never written a large application using Django.)

Django also has a pony, in case you secretly desire that, too.

mipadi
In fact, Rails scalability is widely questioned. Django has a better record on this aspect; but any framework definitely has a 'wall' at certain point.
Javier
That's why I said "up to a point", although I think that the "scalability woes" of Rails is overhyped. For the majority of sites, even large ones, it does fine. Twitter's issues with Ruby have gotten a lot of attention, but Twitter also has some crazy back-end stuff going on that most sites don't have to deal with (even large ones).
mipadi
+1 for the pony (and also well made points)
annakata
We have decided to go with Django, but it was a close run with CodeIgnitor.Python's support for sockets and it's design as a language for application development means much of our other server code could eventually be migrated to Python, beginning a standardization process to migrate to one language instead of the 4+ that we have now.Thank you all!
Zachary Spencer
A: 

I think that for sheer volume of documentation you can't beat J2EE. It's also believed to be insanely scalable and stable.

Now, from there to really being desirable....

Javier
+1  A: 

You can have a look at Django, Python framwork. It's a very well documented framework, it has an automatic CRUD administrator interface on database and it has also a free book online, that of course you can buy for real :)

Patrizio Rullo
A: 

If Java is in your toolkit, look at Stripes.

Rock stable, enthusiastic, though no a spectacularly large community. Good docs, some out of date granted, but the system is so stable even the "old stuff" is relevant. A real nice, recent (late last year) book. Stripes is small enough that the book can, and does, "cover everything".

It's an action framework, doesn't do much in the presentation area (save for forms, mostly, and it has a completely optional templating/layout facility). You can use JSP or FreeMarker, or, really, anything else. It can also do web services (though not as well as something like Jersey).

It is back end agnostic, but there is a JPA integration project for it.

Finally, you can leverage, if you like, all of the other Java/JEE kit if you want. Since Stripes doesn't consume the entire stack, you have a lot of flexibility to pick and choose the parts you want. Full boat JEE, Transactions, Session Beans, JMS. Works with Spring (it is "conscious" of Spring and has good integration) JPA, iBatis, Hibernate, raw JDBC, Lucene, JSR-170 Content Repository, whatever.

It's a great piece of kit.

Will Hartung
A: 
The Wicked Flea
Grr, I can't fix the link. My message is being slaughtered by ONE misbehaving link!
The Wicked Flea