Python Falcon - 简介



Falcon 是一个用于开发关键任务 REST API 和微服务的 Python 库。它支持 WSGI 和 ASGI 规范。Falcon 框架由 Kurt Griffiths 于 2013 年 1 月开发。Falcon 的最新版本是 3.1.0,于 2022 年 3 月发布。

Falcon 是一个轻量级的 Web 开发框架。其极简主义的设计允许开发人员根据需要选择最佳策略和第三方软件包。

Falcon - 重要特性

Falcon 在 Apache 2.0 许可证的条款下发布。

Falcon 的一些重要特性包括:

  • 最新版本的 Falcon 支持 ASGI、WSGI 以及 WebSocket。

  • Falcon 提供对 asyncio 的原生支持。

  • 其稳定的接口确保向后兼容性。

  • Falcon 遵循 REST 架构风格来构建 API。

  • 基于类的 HTTP 资源构建。

  • 高度优化、可扩展的代码库。

  • Falcon 通过请求和响应类提供对标头和主体内容的轻松访问。

  • 提供中间件组件和钩子,用于 DRY 请求处理。

  • 惯用的 HTTP 错误响应和异常处理。

Falcon - 设计理念

Falcon 最小化了对象实例的数量,以避免创建对象的开销,并减少内存使用。同一个实例将用于服务该路由上所有传入的请求。

  • 异常由资源响应器(如 on_get()、on_post() 等方法)正确处理。Falcon 不会努力保护响应器代码免受自身的影响。高质量的 Falcon API 应满足以下要求:

    • 资源响应器将响应变量设置为合理的值。

    • 您的代码经过充分测试,具有较高的代码覆盖率。

    • 在每个响应器中提供自定义错误处理程序,以预测、检测和处理错误。

  • Falcon 框架是线程安全的。为每个传入的 HTTP 请求创建单独的新请求和响应对象。但是,附加到路由的每个资源类的单个实例在所有请求之间共享。中间件对象、钩子和自定义错误处理程序也共享。因此,您的 WSGI 应用作为一个整体将是线程安全的。

  • 从 3.0 版本开始,Falcon 支持 asyncio。使用 falcon.asgi.App 类创建异步应用程序,并通过 ASGI 应用程序服务器(如 Uvicorn)提供服务。

  • Falcon 的异步版本支持 ASGI WebSocket 协议。

Falcon - 与其他框架的比较

Python Web 框架主要分为两大类:全栈微型框架。

  • 全栈框架带有内置的功能和库。Django、TurbogearsWeb2Py 是全栈框架。

  • 相反,微型框架是极简主义的,只提供最基本的功能;因此,开发人员可以自由选择官方或第三方扩展,并且只包含他们需要的插件。Flask、Falcon、Pyramid 属于微型框架类别。

我们根据以下参数比较 Falcon 框架与不同的框架:

性能

与 Flask 和 Pyramid 等微型框架相比,Falcon 应用程序非常快。全栈框架通常比较慢。

REST 支持

Falcon 旨在成为开发 REST API 和微服务的首选框架。FastAPI 也鼓励 REST 开发。Flask 和 Django 没有内置的 REST 支持。但是,可以使用扩展来启用它。

模板

Falcon 应用程序不应该服务模板网页。它没有捆绑任何模板库。但是,可以使用 jinja2Macho 库。另一方面,Flask 内置支持 jinja2。Django 有自己的模板库。FastAPI 也可以处理任何选择的模板库。

数据库支持

在 Falcon 中,数据库支持不是内置的。可以使用 SQLAlchemy 模型与关系数据库(如 MySQL、PostgreSQL、SQLite 等)进行交互。另一方面,Django 有自己的 ORM 框架,可以开箱即用。

Flask 应用程序也可以通过 Flask 扩展与数据库进行交互。早期版本的 TurboGears 与 SQLObject ORM 库兼容。较新的版本与 SQLAlchemy 兼容。

灵活性

Falcon 应用程序非常灵活。它非常适合需要高度定制和性能优化的应用程序。FastAPI 和 Flask 也灵活易于编码,并且不限制用户使用特定的项目或代码布局。

安全性

Falcon 没有内置的安全支持。其他框架(如 Django 和 FastAPI)确保高度的安全。Flask 也提供了针对 CSRF 和 XSS 等安全威胁的出色保护。

测试

Falcon 使用 unittest 和 Pytest 提供内置测试支持。Flask 和 Django 也支持 unittest。FastAPI 支持 unittest 和 starlette 测试功能。

广告