Какие фреймворки (а может быть даже одного хватит) выбрать для Web-сервиса на Python в котором будет REST и MongoDB?
Для более глубокого знакомства с python хочу сделать свой маленький проектик в котором обязательно данные будут в монге, а взаимодействие с клиентской стороной будет по REST'у.
Только не нужно меня отговаривать от монги и т.п. Это личный проект и технологии выбраны именно для ознакомления, даже если это не оптимальный выбор.
Суть проекта - агрегатор одной из услуг. Т.е. есть компании, оказывающие одну и туже услугу. Но прайсы и некоторые условия у них разные. Будет как-бы обобщенный калькулятор стоимости услуги. Клиент вводит параметры (начальные данные). Запрос идет на сервер. Сервер отдает сколько будет стоить данная услуга у того или иного поставщика.
Что хочу на сервере (клиентская часть сейчас не интересует):
- python
- REST API для взаимодействия с клиентом
- MongoDB для хранения всех данных
Ну и собственно сам вопрос: какие Web-фреймворки для питона порекомендуете использовать?
Хотелось бы получить такой стек, чтобы ежа с ужом скрещивать не пришлось :)
Рекомендую Django как фреймворк в котором есть все и еще дофига чего. Можно сказать промышленный стандарт. Я использую pymongo, но возможно стоит посмотреть в сторону какого-нибудь ODM.
Рекомендую Tornado как простой асинхроный и прикольный. Если хочется побаловаться с асинхронностью. Хотя он менее популярный и библиотек много меньше.
Также можно посмотреть Flask он простой и минималистичный, было интересно, но в итоге я от него отказался в пользу Джанги, т.к. все время приходилось писать велосипеды.
Монга прикольная штука, но и реляционные базы достаточно удобны и под них больше инструментов. Часто использую вместе.
Однозначно не django - Вам не зачем тащить к себе ORM, шаблонизатор и прочее. Смотрите в сторону лёгких микрофреймворков. Лично я посоветовал бы falcon - выигрывает в производительности довольно сильно, заточен под rest.
Практика показывает, что микрофреймворки выигрывают в производительности лишь на отдаче фразы "hello world" из примера, а на реальных задачах, о выигрыше в производительности говорить не приходится. Вот смотри один процесс, один поток - Flask на отдаче "hello world" далает 1000 rps, а Джанга лишь 500. Казалось бы, офигенно, выигрыш в целых два раза. Но на реальном проекте внутри вьюхи (или контроллера в терминах MVC) есть какая-то логика, запросы к базе, обработка и прочее . Если тебе удалось достигнуть производительности на своем проектое в 100 rps на один поток, то это очень круто, зачастую бывает меньше. Но в данном случае уже получается у Фласка время на ответ 11 милисекунд, а у Джанги 12. Что уже не явялется серьезной разницей в производительности. А если брать более реальные цыфры, например 50 rps от приложения, тот тут разница будет меньше 5%. У микрофреймворков постоянно проблема с тем, что приходится саму писать, то что в Джанге есть либо из коробки, либо в виде внешних приложений. Стоит ли весь геморой с написанием велосипедов из говна и палок, ради этих 5%? Я думаю нет. А вообще, если действительно важна производительность в ущерб скорости разработки, то для веба надо брать асинхронный фреймворк, скажем Tornado.