FastAPI官档精编002 - 特性

作者: 呆鸟的简书 | 来源:发表于2021-09-08 11:41 被阅读0次

    呆鸟云:发布本系列旨在推广 FastAPI 以及推进 FastAPI 中文官档翻译,目前,FastAPI 官档已完成 98% 的中文翻译,如果您对 FastAPI 有兴趣,可以为这个很赞的开源项目做些贡献,比如校译、翻译、审阅等。

    开源项目的发展离不开大家的支持。当然最简单的就是在 Github 上点 Star 了。

    如果您觉得 FastAPI 不错,也可以转发、转载本文,让更多人知道 Python 还有这么简单的后端支持库。

    下面先列出几个需要 Review 的 PR,希望大家多多参与。

    以下为正文。


    FastAPI 特性

    FastAPI 具备以下特性:

    基于开放标准

    • OpenAPI 用于创建 API,包括声明路径操作、参数、请求体、安全等
    • 使用 JSON Schema 的自动数据模型文档,(OpenAPI 就是基于 JSON Schema)
    • 基于标准设计,历经缜密的研究,并非狗尾续貂
    • 支持在多种语言中自动生成客户端代码

    自动文档

    API 文档和探索性 Web 用户界面。FastAPI 基于 OpenAPI,支持多种备选文档方案,目前默认自带 2 个 API 文档。

    • Swagger UI,可在浏览器中实现交互式探索,直接调用和测试 API
    Swagger UI 交互
    • 备选 API 文档:ReDoc
    ReDoc

    现代 Python

    借助 Pydantic,FastAPI 的功能全部基于标准的 Python 3.6 类型声明。无需学习新语法,只需要标准的现代 Python 。

    就算不使用 FastAPI,最好也花几分钟学习一下 Python 类型,详见:Python 类型。

    使用类型的标准 Python:

    from types import List, Dict
    from datetime import date
    
    from pydantic import BaseModel
    
    
    # 把变量声明为字符串
    # 在函数内部获得编辑器支持
    def main(user_id: str):
        return user_id
    
    
    # Pydantic 模型
    class User(BaseModel):
        id: int
        name: str
        joined: date
    

    用法如下:

    my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
    
    second_user_data = {
        "id": 4,
        "name": "Mary",
        "joined": "2018-11-30",
    }
    
    my_second_user: User = User(**second_user_data)
    

    !!! info "说明"

    `**second_user_data` 是指:
    
    直接把 `second_user_data` 字典的键值作为关键字参数传递,等效于:`User(id=4, name="Mary", joined="2018-11-30")`
    

    编辑器支持

    FastAPI 设计的易用且直观,为了确保最佳的开发体验,所有设计方案在开发前就在多个编辑器上进行了测试。

    最新的 Python 开发者调查报告显示使用最多的功能是自动补全

    FastAPI 就是基于这一点,处处都有自动补全。

    开发者几乎不需要翻阅文档。

    编辑器会提供各种帮助:

    • Visual Studio Code:
    编辑器支持
    • PyCharm:
    编辑器支持

    即便在之前不敢想象的位置,也实现了代码自动补全。例如,自动补全 JSON 请求体(可能是嵌套的)中的键 price

    再也不会输错键名,也不用来回翻阅文档,更不用上下求索,确认最后使用的是 username 还是 user_name

    简洁

    所有对象都有合理的默认值,处处都有可选配置。所有参数都可以微调,以满足您的需求,开发出理想的 API。

    但默认的前提是,一切都能正常运转

    验证

    • 验证绝大部分 Python 数据类型,包括:

      • JSON 对象(字典)
      • JSON 数组(列表),支持定义成员类型
      • 字符串(字符串)字段,支持定义最小或最大长度
      • 数字(整数、浮点数),支持定义最大值和最小值
    • 校验外部类型, 比如:

      • URL
      • Email
      • UUID 等……

    所有的验证都由完善且稳定的 Pydantic 处理。

    安全与身份验证

    集成了安全和身份验证,杜绝数据库或数据模型的渗透风险。

    OpenAPI 中定义的安全概图,包括:

    • HTTP 基本验证
    • OAuth2(使用 JWT 令牌
    • 以下几种对象中的 API 密钥:
      • 请求头
      • 查询参数
      • Cookies 等

    此外,还有 Starlette(包括 session cookie)的所有安全功能。

    所有的工具和组件都可以复用,并能轻易地与您的系统、数据仓库、关系型数据库、 NoSQL 数据库集成。

    依赖注入

    FastAPI 的依赖注入系统非常简单,但却十分强大。

    • 支持子依赖项的依赖项,可创建多层依赖项或图依赖项
    • FastAPI 会自动处理所有操作
    • 所有依赖项都可以从请求获取数据,并且增加了路径操作约束和 API 文档
    • 依赖项中定义的路径操作参数也可以自动验证
    • 支持复杂的用户身份验证系统,数据库连接
    • 不依赖数据库、前端,但是和它们集成很简单

    无限的插件

    其实,FastAPI 并不需要插件,可以直接导入和使用所需的代码。

    依赖项可以把任意支持库轻易地整合进 FastAPI 应用,使用与路径操作相同的架构和语法,只要两行代码就可以为应用创建任意插件

    测试

    • 100% 测试覆盖
    • 代码库 100% 类型注释
    • 用于生产应用

    Starlette 特性

    FastAPI 完全兼容并基于 Starlette。所以,Starlette 代码能在 FastAPI 应用中正常运行。FastAPI 实际上是 Starlette 的子类。只要了解 Starlette,就可以使用它的绝大部分功能。

    FastAPI 拥有 Starlette 的所有功能,可以说,它是 Starlette 的加强版:

    • 令人惊叹的性能。Python 最快的框架之一,堪比 NodeJSGo
    • 支持 WebSocket
    • 支持 GraphQL
    • 后台任务处理
    • Startup 和 Shutdown 事件
    • 基于 requests 测试客户端
    • CORS、GZip、静态文件、流响应
    • 支持 Session 和 Cookie
    • 100% 测试覆盖率
    • 代码库 100% 类型注释

    Pydantic 特性

    FastAPI 完全兼容并基于 Pydantic。所以,Pydantic 代码能在 FastAPI 应用中正常运行。

    FastAPI 还支持基于 Pydantic 的外部库,例如,数据库的 ORM、ODM。

    也就是说,很多情况下,可以把从请求中获得的对象直接传到数据库,因为所有的验证都是自动的。

    反之,也可以把从数据库中获取的对象直接传到客户端

    FastAPI 支持 Pydantic 的所有功能(基于 Pydantic 实现数据处理):

    • 不烧脑
      • 无需学习新的概图定义微语言
      • 只要了解 Python 类型,就能使用 Pydantic
    • 适配 IDE
      • 因为 Pydantic 数据结构只是定义的类实例;自动补全、linting、mypy 都可以和验证数据一起正常运作,完全符合直觉
    • 更快
      • 在基准测试中,Pydantic 比其它参与测试的其它库都快
    • 验证复杂结构
      • 使用层级式 Pydantic 模型,Python typingListDict
      • 验证器可以清晰、简单地定义、校验复杂数据概图,并存档为 JSON Schema
      • 深度嵌套 JSON 对象,并可进行验证和注释
    • 可扩展
      • Pydantic 支持自定义数据类型,使用验证装饰器扩展对模型的验证方法
    • 100% 测试覆盖率

    相关文章

      网友评论

        本文标题:FastAPI官档精编002 - 特性

        本文链接:https://www.haomeiwen.com/subject/lbqvwltx.html