英文原版文档: https://fastapi.tiangolo.com
源代码: https://github.com/tiangolo/fastapi
FastAPI是基于python3.6+和标准python类型的一个现代化的,快速的(高性能),构建api的web框架。
这是他的特点关键词:

  • Fast: 非常高的性能,媲美nodejs和go。可用的最快的Python框架之一.
  • Fast to Code 增加了200%~300%开发功能的速度
  • Fewer Buys 减少了40%的人为开发错误
  • Intuitive 伟大的编辑支持。减少了debug时间。
  • Easy 简单的使用和学习设计,减少了阅读文档的时间。
  • Short 减少代码重复,每个参数声明的多个特性,更少的错误。
  • Robust 获得生产就绪代码。自动交互文档。
  • Standards-based 基于开放的标准API: OpenAPIJSON Schema

    意见

    Typer, FastAPI的Cli

    如果你创建了一个CLI应用在终端使用代替一个web api,检查Typer.Typer是FastAPI的子集。它是CLIs的FastAPI。⌨️🚀

    Requirements

    Python 3.6+
    FastAPI 站在巨人的肩膀上:

  • Starlette 提供web部分。

  • Pydantic 提供数据部分。

    安装

    1. pip install fastapi

    你也将需要一个ASGI服务器,在生产环境中使用例如Uvicorn.

    1. pip install uvicorn

    举例

    创建它

  • 创建一个main.py文件:

    1. from fastapi import FastAPI
    2. app = FastAPI()
    3. @app.get("/")
    4. def read_root():
    5. return {"Hello": "World"}
    6. @app.get("/items/{item_id}")
    7. def read_item(item_id: int, q: str = None):
    8. return {"item_id": item_id, "q": q}

    启动它

    1. 终端运行: uvicorn main:app --reload
    2. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
    3. INFO: Started reloader process [1969]
    4. INFO: Started server process [1971]
    5. INFO: Waiting for application startup.
    6. INFO: Application startup complete.

    检查它

    打开浏览器,地址栏输入:http://127.0.0.1:8000/items/5?q=somequery.
    你会看到一个json响应对象:

    1. {"item_id": 5, "q": "somequery"}

    你已经创建了一个API:

  • 通过路径//items/{item_id}接收HTTP请求。

  • 两个路径使用GET操作。
  • 路径/items/{item_id}有一个路径参数item_id并且是个int
  • 路径/items/{item_id}有一个可操作性的str查询参数q.

    交互式的API文档

    现在浏览器进入 http://127.0.0.1:8000/docs
    FastAPI 介绍 - 图1

    替代API文档

    现在,浏览器进入http://127.0.0.1:8000/redoc.
    你将看到替代的自动文档.
    FastAPI 介绍 - 图2

    举例升级

    现在修改main.py文件来从一个PUT请求中接收数据。
    使用python标准类型来声明主体,感谢Pydantic.

    1. from fastapi import FastAPI
    2. from pydantic import BaseModel
    3. app = FastAPI()
    4. class Item(BaseModel):
    5. name: str
    6. price: float
    7. is_offer: bool = None
    8. @app.get("/")
    9. def read_root():
    10. return {"Hello": "World"}
    11. @app.get("/items/{item_id}")
    12. def read_item(item_id: int, q: str = None):
    13. return {"item_id": item_id, "q": q}
    14. @app.put("/items/{item_id}")
    15. def update_item(item_id: int, item: Item):
    16. return {"item_name": item.name, "item_id": item_id}

    服务器会自动的重启(因为你添加了--reload参数给上面的uvicorn)。

    交互式API文档更新

    现在进入 http://127.0.0.1:8000/docs

  • 交互式文档会被自动更新,包含了新的部分。

FastAPI 介绍 - 图3

  • 点击”Try it out”按钮,它允许你填充参数并且直接的与API交互。

FastAPI 介绍 - 图4

  • 然后点击”Execute”按钮,用户接口会连接你的API,发送参数,获取结果显示到屏幕上。

FastAPI 介绍 - 图5

替换API文档的更新

现在,进入 http://127.0.0.1:8000/redoc.

  • 这个替换文档也将会显示新的查询参数和请求体。

FastAPI 介绍 - 图6

要点总结

总之,只需将参数、主体等类型声明为函数参数。
使用标准的现代Python类型就可以做到这一点。 您不必学习新的语法、特定库的方法或类,等等。
只要标准的Python 3.6+。

性能

独立的TechEmpower基准测试显示,在Uvicorn下运行的FastAPI应用程序是可用的最快的Python框架之一,仅低于Starlette和Uvicorn本身(由FastAPI内部使用)。
要更多地了解它,请参阅基准测试一节.

可选依赖

使用Pydantic:

  • ujson - 为了更快的JSON解析
  • email_validator - 为了邮件验证

使用Starlette:

  • requests - 使用TestClient.
  • aiofiles - 使用FileResponse或者StaticFiles.
  • jinja2 - 默认的模板配置.
  • python-mutipart - 需要使用request.form()进行解析.
  • itsdangerous - 需要SessionMiddlerware支持.
  • pyyaml - 需要Starlette的SchemaGenerator支持.
  • graphene - 需要GraphQLApp支持.
  • ujson - 如果你想要使用UJSONResponse

使用FastAPI/Starlette:

  • uvicorn - 使服务器加载并运行你的应用。
  • orjson - 如果你想要使用UJSONResponse.

你可以安装他们通过pip install fastapi[all]