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 请求创建单独的新 Request 和 Response 对象。但是,附加到路由的每个资源类的单个实例在所有请求之间共享。中间件对象、挂钩和自定义错误处理程序也是共享的。因此,您的 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 应用速度非常快。全栈框架通常很慢。

休息支持

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 也支持单元测试。FastAPI 支持单元测试和星形测试功能。