Колба против webapp2 для Google App Engine


Я начинаю новое приложение Google App Engine и в настоящее время рассматривает две структуры: колбы и webapp2. Я довольно доволен встроенной платформой webapp, которую я использовал для своего предыдущего приложения App Engine, поэтому я думаю, что webapp2 будет еще лучше, и у меня не будет никаких проблем с ним.

тем не менее, есть много хороших отзывов о колбе, мне очень нравится ее подход и все то, что я читал до сих пор в документации и Я хочу попробовать его. Но я немного обеспокоен ограничениями, с которыми я могу столкнуться по дороге с фляжкой.

Итак, вопрос - знаете ли вы какие-либо проблемы, проблемы с производительностью, ограничения (например, система маршрутизации, встроенный механизм авторизации и т. д.) что колба может принести в приложение Google App Engine? под "проблемой" я имею в виду то, что я не могу обойти в нескольких строках кода (или любое разумное количество кода и усилий) или что-то такое совершенно невозможно.

и в качестве последующего вопроса: есть ли какие-либо убийственные функции в колбе, которые, по вашему мнению, могут взорвать мой разум и заставить меня использовать его, несмотря на любые проблемы, с которыми я могу столкнуться?

5 113

5 ответов:

отказ от ответственности: Я автор tipfy и webapp2.

большим преимуществом использования webapp (или его естественной эволюции, webapp2) является то, что вам не нужно создавать свои собственные версии для существующих обработчиков SDK для вашего фреймворка по вашему выбору.

например, отложить использует обработчик веб-приложение. Чтобы использовать его в чистом виде колбы, используя werkzeug.Запрос и сверла.Ответ, вам нужно будет реализовать отложенный для него (как я сделал здесь для tipfy).

то же самое происходит и для других обработчиков: blobstore (Werkzeug по-прежнему не поддерживает запросы диапазона, поэтому вам нужно будет использовать WebOb, даже если вы создадите свой собственный обработчик-см. tipfy.appengine.blobstore), почта, XMPP и так далее, или другие, которые включены в SDK в будущем.

и то же самое происходит для библиотек, созданных с помощью App Engine в виду, как ProtoRPC, который основан на webapp и нуждается в порт или адаптер для работы с другими фреймворками, если вы не хотите смешивать обработчики webapp и your-framework-of-choice в одном приложении.

таким образом, даже если вы выберете другую структуру, вы закончите a) использование webapp в некоторых особых случаях или b) необходимость создавать и поддерживать свои версии для конкретных обработчиков SDK или функций, если вы будете их использовать.

Я предпочитаю Werkzeug над WebOb, но после более чем одного года портирования и поддержки версий обработчиков SDK, которые работают изначально с tipfy я понял, что это потерянная причина-чтобы поддерживать GAE в долгосрочной перспективе, лучше всего оставаться рядом с webapp/WebOb. Это делает поддержку библиотек SDK легким ветерком, обслуживание становится намного проще, оно более защищено от будущего, поскольку новые библиотеки и функции SDK будут работать из коробки, и есть преимущество большого сообщества, работающего вокруг тех же инструментов App Engine.

конкретная защита webapp2 суммируется здесь. Добавьте к тем, что webapp2 может использоваться за пределами App Engine и легко настраивается, чтобы выглядеть как популярные микро-фреймворки и у вас есть хороший набор веские основания, чтобы пойти на это. Кроме того, webapp2 имеет большой шанс быть включенным в будущий выпуск SDK (это экстра-официальный, Не цитируйте меня: -), который будет продвигать его вперед и приносить новых разработчиков и вклады.

тем не менее, я большой поклонник Werkzeug и pocoo ребята и позаимствовал много от Flask и других (web.py, Торнадо), но-и, вы знаете, я предвзят-вышеуказанные преимущества webapp2 должны быть приняты во внимание.

Ваш вопрос чрезвычайно широк, но, похоже, нет больших проблем с использованием Flask на Google App Engine.

этот список рассылки нить ссылки на несколько шаблонов:

http://flask.pocoo.org/mailinglist/archive/2011/3/27/google-app-engine/#4f95bab1627a24922c60ad1d0a0a8e44

и вот учебник, специфичный для Flask / App Engine комбинация:

http://www.franciscosouza.com/2010/08/flying-with-flask-on-google-app-engine/

Также см. App Engine-Трудность Доступа К Данным Twitter-Колба,сообщение колбы мигает не удается через перенаправления и как управлять сторонними библиотеками Python с помощью Google App Engine? (виртуальное окружение? Пип?) для вопросов, которые люди имели с колбой и Google App Engine.

для меня решение для webapp2 было легко, когда я обнаружил, что flask не является объектно-ориентированной структурой (с самого начала), в то время как webapp2 является чистой объектно-ориентированной структурой. webapp2 использует метод на основе диспетчеризации в качестве стандарта для всех RequestHandlers (как flask documentation называет его и реализует его с V0.7 в MethodViews). В то время как в колбе MethodViews являются надстройкой, это основной принцип проектирования для webapp2. Таким образом, ваш дизайн программного обеспечения будет выглядеть по-разному, используя обе платформы. Оба фреймворки используют в настоящее время шаблоны jinja2 и довольно идентичны.

Я предпочитаю добавлять проверки безопасности в базовый класс RequestHandler и наследовать от него. Это также хорошо для функций полезности и т. д. Как вы можете видеть, например, в ссылке [3] Вы можете переопределить методы, чтобы предотвратить отправку запроса.

Если вы OO-человек, или если вам нужно создать REST-сервер, я бы рекомендовал webapp2 для вас. Если вы предпочитаете простые функции с декораторами в качестве обработчиков для нескольких типов запросов или вам неудобно с OO-наследованием, затем выберите flask. Я думаю, что обе структуры избегают сложности и зависимостей гораздо больших фреймворков, таких как пирамида.

  1. http://flask.pocoo.org/docs/0.10/views/#method-based-dispatching
  2. https://webapp-improved.appspot.com/guide/handlers.html
  3. https://webapp-improved.appspot.com/guide/handlers.html#overriding-dispatch

Я думаю, что Google app engine официально поддерживает фреймворк flask. Здесь есть пример кода и учебник - > https://console.developers.google.com/start/appengine?_ga=1.36257892.596387946.1427891855

Я не пробовал webapp2 и обнаружил, что tipfy было немного сложно использовать, так как для этого требовались сценарии установки и сборки, которые настраивают вашу установку python не по умолчанию. По этим и другим причинам я не сделал свой самый большой проект зависящим от фреймворка, и вместо этого я использую простое веб-приложение, добавьте библиотеку под названием beaker, чтобы получить возможность сеанса, и у django уже есть встроенные переводы для слов, общих для многих usecases, поэтому при создании локализованного приложения django был правильный выбор для моего большого проекта. 2 других фреймворка, которые я фактически развернул с проектами в производственной среде, были GAEframework.com и web2py и вообще кажется, что добавление фреймворка, который изменяет его шаблонный движок, может привести к несовместимости между старыми и новыми версиями.

Итак, мой опыт заключается в том, что я неохотно добавляю фреймворк в свои проекты, если они не решают более продвинутые варианты использования (загрузка файлов, multi auth, пользовательский интерфейс администратора - это 3 примера более продвинутые варианты использования, которые на данный момент не обрабатываются фреймворком для gae.