前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习FastAPI一些体会

学习FastAPI一些体会

原创
作者头像
云帆沧海
修改2024-01-24 10:46:41
7200
修改2024-01-24 10:46:41
举报
文章被收录于专栏:编程杂记

1.FastAPI简介

FastAPI 是一个基于 Python 3.7+ 的现代、高性能 Web 框架,专注于构建 RESTful API。它通过结合强类型注解、异步编程、自动文档生成等特性,提供了快速开发 Web API 的能力。同时官方文档也比较全面,也易于学习。性能也比较高,适合投入实际生产。

1.1自动生成文档

特别是他通过自动生成文档功能,可以通过访问 /docs 或 /redoc 端点来查看生成的文档。十分方便去调试代码。

只需要在URL上添加/docs就可以访问文档可可以进行代码调试,特别是对于post请求是浏览器是不能直接访问的所以需要一个文档来进行调试,而FastAPI就自带了这个功能。

如下图所示点击try out即可调试程序

1.2类型注解

使用 Pydantic 的数据模型,我们可以轻松地定义 API 的输入和输出的结构,并确保数据的完整性和一致性。通过类型注解,我们可以清晰地表达每个字段的期望类型,使得开发者在编写和阅读代码时更容易理解数据的结构。

Pydantic 还提供了丰富的验证规则,如最小值、最大值、正则表达式等,可以直接应用于字段,从而在输入和输出数据的时候进行有效的数据验证。这有助于在早期发现潜在的错误,并降低了在运行时出现问题的可能性。

另外,Pydantic 自动生成的文档使得 API 接口的使用更加友好。开发者可以通过查看自动生成的文档了解每个接口的输入和输出的结构,以及每个字段的含义和验证规则。这简化了文档的维护工作,因为文档会随着代码的更改而自动更新。

综合来说,通过使用 Pydantic 进行数据验证和序列化,我们不仅提高了代码的可维护性,还减少了潜在的错误发生的可能性,同时使得 API 更易于理解和使用。这为开发人员提供了更好的开发体验,同时也提高了代码的质量和稳定性。

例如:

代码语言:python
代码运行次数:0
复制
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.post("/items/")
async def create_item(item: Item):
    return item

这个程序类型注解就是规定了name , description变量用str字符串类型,并且description使用了默认值也就不是必须填写的字段,变成了选填的字段,对开发者和前端开发者做了一个很好的提示,规定了类型,也提高了使用效率。

调用也是非常的方便

运行之后打开文档:

点击(Try it out)调试之后:

可以清楚的看到数据类型已经声明

把tax输入为字符串类型之后

会显示报错。

这就体现了自动生成验证规则。这不仅使得数据验证更加方便,还提供了自动的文档生成。

1.3依赖注入系统

FastAPI 提供了一个强大的依赖注入系统,使得在路由处理函数中使用依赖项(如数据库连接、配置等)变得简单。这提高了代码的可测试性和可维护性。

1.4安全性

FastAPI在设计上注重安全性,提供了一系列内置的安全特性,自动处理常见的安全问题,使得开发者能够更轻松地构建安全可靠的Web应用程序。

1.4.1 防止 SQL 注入

FastAPI使用Pydantic模型进行数据验证,并通过ORM(对象关系映射)框架(如SQLAlchemy)来处理数据库操作。这种方式有效地防止了SQL注入攻击,因为FastAPI会自动转义和处理用户输入,确保安全的数据库查询。

1.4.2 CSRF 保护

FastAPI内置了CSRF保护机制,通过生成和验证CSRF令牌来防止跨站请求伪造攻击。在默认情况下,FastAPI会为每个表单和Cookie自动生成CSRF令牌,开发者无需手动处理CSRF保护,从而提高了应用程序的安全性。

1.4.3 身份验证机制:

OAuth2 支持

FastAPI提供了对OAuth2的内置支持,使得开发者能够轻松集成OAuth2认证流程,用于实现安全的用户身份验证和授权。

JWT 支持

JSON Web Tokens(JWT)是一种用于安全传输信息的开放标准。FastAPI支持JWT,可以轻松集成JWT身份验证机制,用于在Web应用中对用户进行安全认证和授权。

HTTPS 安全传输: FastAPI推荐在生产环境中使用HTTPS,以确保数据在传输过程中的安全性。FastAPI能够与ASGI服务器(如uvicorn)一起使用,支持HTTPS的配置。

请求验证和过滤: FastAPI通过Pydantic模型自动验证请求数据,确保输入的合法性。它还提供了许多内置的请求过滤器,例如Depends装饰器,用于处理认证、权限等安全相关的逻辑。

1.4.4 支持异步功能

FastAPI是基于Starlette框架构建的,这使得它能够充分利用Starlette框架的异步特性,从而提供了出色的性能和并发处理能力。Starlette本身就是一个异步框架,基于ASGI(Asynchronous Server Gateway Interface)标准,因此FastAPI能够借助Starlette实现高效的异步请求处理。

通过支持异步请求处理,FastAPI能够轻松地处理大量并发请求,而无需阻塞整个应用程序。异步性能的提升对于处理I/O密集型任务、调用外部API或数据库查询等场景尤为显著。这使得FastAPI成为构建实时应用程序和服务的理想选择,例如聊天应用、实时数据分析等。

在异步编程方面,FastAPI还充分利用了Python 3.7引入的async和await关键字,使得开发者能够以更直观和简洁的方式编写异步代码。这种语法上的改进使得异步开发变得更加容易理解和维护。

综合而言,基于Starlette框架的异步支持使FastAPI在性能和并发处理方面具有显著的优势,为开发者提供了构建高性能异步应用程序的强大工具。

例如:

代码语言:python
代码运行次数:0
复制
from fastapi import FastAPI

app = FastAPI()

@app.get("/async_endpoint")
async def async_endpoint():
    return {"message": "Hello, async world!"}

1.5 与其他框架的对比

FastAPI作为一个比较新的框架,相对于传统的框架来说有着其独特的优越性能

下面简单的比较一下他与其他传统框架

Django

FastAPI的最大区别之一就在于其独有的交互式文档生成功能。通过使用Swagger UI和ReDoc,FastAPI能够自动生成API的交互式文档,为开发人员提供了一个方便的平台,用于浏览、测试和理解API的各个端点。这种实时生成文档的机制使得开发者能够快速了解API的结构、参数和响应,提高了开发的效率。

在这个交互式文档中,开发人员可以直接尝试API端点,输入参数并查看实时的响应。这种实时测试的能力极大地简化了调试过程,帮助开发者快速验证其代码的正确性。这对于协作团队、新项目的启动以及对API的快速迭代都是非常有益的。

此外,FastAPI还倚仗Pydantic库提供强大而灵活的数据验证机制。Pydantic不仅能够对请求数据进行自动验证,还能够进行数据转换和序列化。通过在模型中定义数据的类型和规则,开发者可以确保输入和输出数据的合法性,减少了潜在的错误发生的可能性。这种类型注解和数据验证的组合为开发者提供了更加可靠和安全的编码体验。

因此,FastAPI的交互式文档和Pydantic的数据验证为开发者提供了全面的工具,使得他们能够更加轻松地构建、测试和维护高性能的RESTful API。这些特性使得FastAPI在现代Web开发中脱颖而出,为开发者提供了一个全面而强大的框架。

Flask

FastAPI和Flask是两个在Python Web开发领域广泛使用的框架,它们在一些方面有着相似之处,但在自动生成文档和异步编程性能方面存在独特的优势。

首先,FastAPI在自动生成文档方面的独特优势使其在API开发中更为突出。通过集成Swagger UI和ReDoc,FastAPI能够自动生成交互式文档,为API的可视化和测试提供了便捷的平台。这极大地简化了开发者的工作流程,让他们能够更快地理解和调试API。相比之下,Flask通常需要使用额外的工具或插件来生成文档,这一过程可能相对繁琐。

其次,FastAPI对异步编程的支持使其在处理高并发和I/O密集型任务时表现更为出色。通过使用异步框架和Python的async和await关键字,FastAPI能够实现非阻塞的异步请求处理,提高系统的吞吐量和性能。这对于需要处理大量并发请求或需要调用外部异步服务的应用程序来说是一个明显的优势。相较之下,Flask在这方面的支持相对有限,需要使用其他异步库来实现异步处理。

总体而言,FastAPI通过其独特的文档生成和强大的异步性能在现代Web开发中占据了一席之地。然而,Flask仍然是一个简单易用且功能强大的框架,特别适用于小型项目和对简洁性有要求的应用。选择使用哪个框架取决于项目的具体需求和开发者的偏好。

总结

FastAPI的独特优势不仅体现在异步性能、类型注解和数据验证、自动生成文档等方面,还包括其出色的性能和易用性,使其成为构建现代化、高性能RESTful API的首选框架。异步支持使得FastAPI能够处理大量并发请求,提高系统的吞吐量和响应速度。类型注解和数据验证使得开发者能够以一种更加规范和安全的方式编写代码。通过使用Pydantic库,FastAPI不仅能够对请求和响应数据进行有效的验证,还能够自动转换和序列化数据,减轻了开发者的负担。这种强大的类型系统不仅提高了代码的可读性,还降低了出现潜在错误的可能性,使得代码更加健壮。FastAPI还具有自动生成文档的能力,通过使用Swagger UI和ReDoc,开发者可以轻松地查看和测试API端点。这大大简化了文档编写的过程,同时确保文档的实时性和一致性。这对于团队协作、代码维护和版本控制都具有显著的优势。快速上手的特性使得新手能够迅速入门FastAPI,而其清晰的文档和示例使得学习曲线更加平滑。同时,FastAPI提供了大量的扩展和中间件,使得开发者能够根据项目的需求进行灵活的定制,而不受束缚。

综合而言,FastAPI不仅在技术层面有着卓越的表现,也注重提升开发者的开发体验,这使得它在Python web开发领域有着广泛的应用前景。未来,随着更多的项目采用FastAPI,它有望成为Python web框架领域的领军者,推动着现代化、高效率的API开发范式的发展。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1自动生成文档
  • 1.2类型注解
  • 1.3依赖注入系统
  • 1.4安全性
    • 1.4.1 防止 SQL 注入
      • 1.4.2 CSRF 保护
        • 1.4.3 身份验证机制:
          • 1.4.4 支持异步功能
          • 1.5 与其他框架的对比
          • Django
          • Flask
          • 总结
          相关产品与服务
          多因子身份认证
          多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档