
Ask HN: What Python framework would you use to serve up a REST API? - dheera
flask+uwsgi+nginx, tornado, or something else?
======
avinassh
I use Tornado. It's simple, lightweight and very well documentated. It
wouldn't take much time to get it up and running. And it also supports
asynchronous operations out of box unlike Flask.

However community isn't big as that of Flask and has low bus factor.

Other alternative is Django REST Framework[0]. It's also well documented and
get the work done. However code base is large compared to Tornado. Advantage
is, it has a bigger community support and it's easy to find a developer.

[0] - [http://www.django-rest-framework.org/](http://www.django-rest-
framework.org/)

------
dougzor
We use pyramid+gunicorn+nginx without any issue. Behind that is SQLAlchemy &
Postgres (with memcached for caching layer)

I know that SurveyMonkey also uses the pyramid+nginx setup.

Edit: Pyramid Documentation:
[http://docs.pylonsproject.org/en/latest/docs/pyramid.html#py...](http://docs.pylonsproject.org/en/latest/docs/pyramid.html#pyramid-
documentation)

------
jackgolding
I use flask-restful at work, as a non web developer I haven't had any problems
with it.

------
mushfiq
I used Django Tastypieapi
([http://tastypieapi.org/](http://tastypieapi.org/)). Deployed with wsgi,
backend was mongodb. Worked perfectly fine. Documentation is also better than
average.

------
webmaven
I've just started using Morepath:
[http://morepath.readthedocs.org/](http://morepath.readthedocs.org/)

It's new, not fully baked yet, and yet it is amazingly powerful and simple to
use.

------
techdragon
Another vote for Django Rest Framework, it's very good at getting an API going
when prototyping.

------
kolev
I use Eve [1].

[1] [http://python-eve.org/](http://python-eve.org/)

~~~
mercnet
Eve looks amazing! Do you use SqlAlchemy with it? I notice they created a
separate branch for it and was wondering if it was stable.

~~~
kolev
No, I haven't, but our Eve-based backend has been one of the most stable and
well-performing component.

------
hakanderyal
Flask+uwsgi+nginx. Simple, battle tested, just works.

~~~
dheera
Thanks! Any particular points I should be aware of in this setup?

I've deployed many _small_ websites using flask+uwsgi+nginx before, but for a
high-volume API, there seem to be a number of "fragile" aspects to this, e.g.
processes and threads settings, since WSGI is synchronous.

If I may ask, what's usually the weakest link in this setup, and what's the
best way to monitor for problems and scale appropriately and intelligently as
users grow? For example, let's say I set processes = 16, it hits the limit,
but it turns out that I still have plenty of CPU and RAM to spare and I want
it to dynamically make use of that?

------
johns
flask-restful if flask (powers Twilio API and was written by my co-founder),
Django Rest Framework if Django

