Python Falcon 简介
Falcon 是一个Python库,用于开发关键任务的REST APIs和微服务。它同时支持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、Turbogears 和 Web2Py 是全栈框架。
-
相比之下,微框架则是简约的,只提供最基本的功能;因此给了开发者选择官方或第三方扩展的自由,只包括他们需要的插件。 Flask、Falcon、Pyramid 都属于微框架类别。
我们在以下参数的基础上将Falcon框架与不同的框架进行了比较 —
性能
与Flask和pyramid等微型框架相比,Falcon应用程序的速度非常快。全堆栈框架一般都很慢。
REST支持
Falcon旨在成为开发REST APIs和微服务的首选框架。FastAPI也鼓励REST开发。Flask和Django没有内置的REST支持。然而,它可以通过扩展来启用。
模板化
Falcon应用程序不应该为模板网页提供服务。它没有捆绑任何模板库。然而,人们可以使用 jinja2 或 Macho 库。另一方面,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也支持unittest。FastAPI支持unittest和starlette测试功能。