Python Falcon - 简介

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

Falcon 是一个轻量级的网络开发框架。 其极简设计允许开发者根据需要选择最佳策略和第三方包。


Falcon - 重要特征

Falcon 是根据 Apache 2.0 许可条款发布的。

Falcon 的一些重要功能包括 −

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

  • Falcon 为 asyncio 提供原生支持。

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

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

  • 基于类的 HTTP 资源构建。

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

  • Falcon 通过请求和响应类提供对标头和正文的轻松访问

  • 可用于 DRY 请求处理的中间件组件和 hooks 挂钩。

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


Falcon - 设计理念

Falcon 最大限度地减少对象的实例化数量,从而避免创建对象的开销,并减少内存使用。 同一个实例将用于服务进入该路由的所有请求。

  • 异常由资源响应者正确处理(on_get()、on_post()、 等方法)。 Falcon 并没有非常努力地保护响应程序代码免受自身的影响。 高质量的 Falcon API 应该满足以下要求 −

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

    • 您的代码经过了充分测试,代码覆盖率很高。

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

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

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

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


Falcon - 与其他框架的比较

Python web 框架有两大类 − full-stack全栈框架和 micro 微框架。

  • full-stack 全栈框架带有内置功能和库。 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 模型与关系数据库(如 MyQL、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 支持 unittest 和 starlette 测试功能。