FastAPI系列(1):FastAPI简介

1. 什么是FastAPI

FastAPI是一个现代的,快速(高性能)python web框架。基于标准的python类型提示,使用python3.6+构建API的Web框架。

2. FastAPI有哪些特点

  • 快速:非常高的性能,能够与NodeJSGo媲美(感谢Starlette和Pydantic)。可用的最快的 Python 框架之一
      - Starlette 是一个轻量级 ASGI 框架/工具包。它非常适合用来构建高性能的 asyncio 服务,并支持 HTTP 和 WebSockets。官方网址:https://www.starlette.io/
      - Pydantic 是一个使用Python类型提示来进行数据验证和设置管理的库。Pydantic定义数据应该如何使用纯Python规范用并进行验证。官方网址:https://pydantic-docs.helpmanual.io/
  • 快速开发:将开发功能的速度提高约 200% 到 300%。
      - 代码补全,只能提示(编辑器支持)
      - 类型检查
  • 更少的错误:减少大约40% 的人为(开发人员)引起的错误
      - 类型转换
      - 失败类型自动生成清晰的错误信息
      - 对多层嵌套的 JSON 对象依然执行校验
      - 输入数据转换,将来自于请求的输入数据转换为Python数据类型
        - JSON
        - 路径参数
        - 查询参数
        - Cookies
        - 请求头
        - 表单
        - 文件
      - 将python代码返回的类I型那个转换成接口的json类型
        - 转换 Python 基础类型 (strintfloatboollist 等)
        - datetime 对象
        - UUID 对象
        - 数据库模型
        - …以及更多其他类型
  • 直观:强大的编辑器支持。处处完成。调试时间少。
  • 简单:旨在易于使用和学习。减少阅读文档的时间。
  • 简短:最小化代码重复。每个参数声明的多个功能。更少的错误。
  • 健壮:获取可用于生产环境的代码。具有自动交互式文档。
      - Swagger UI
      - ReDoc
  • 基于标准:基于(并完全兼容)API 的开放标准:OpenAPI(以前称为 Swagger)和JSON Schema

3. 快速开始

要求

  • Python 3.6+
  • FastAPI站在巨人的肩膀上
      - Starlette:Web 部分
      - Pydantic:数据校验部分

安装

pip install fastapi  # 安装fastapi
pip install uvicorn  # ASGI服务器,也可以使用Hypercorn,建议使用Uvicorn

例子

# main.py
# coding:utf8

from typing import Optional  # 导入可选类
from fastapi import FastAPI

app = FastAPI()


@app.get("/")  # 根路由
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

if __name__=='__main__':
    import uvicorn
    uvicorn.run('main:app', host='127.0.0.1', port=8008, reload=True)

运行

python3 main.py
INFO: Uvicorn running on http://127.0.0.1:8008 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.

注:

  1. uvicorn运行的是主程序的fastAPI,字符串方式传入,即上述的’main:app’
  2. 指定主机和端口运行
  3. reload=True,当项目文件更新,程序自动重启(热更新),此选项默认为False

4. 交互式API文档

访问http://127.0.0.1:8008/docs 即可看到可交互式api文档(由Swagger UI提供)

可以看到接口的请求方式、地址、参数、正常响应内容和常见异常响应。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI中,可以使用拦截器(middleware)和过滤器(dependency)来处理请求和响应。它们都可以在请求到达路由处理函数之前或之后执行一些操作,但它们的作用和使用方法不太一样。 拦截器是在请求到达路由处理函数之前或之后执行的一系列操作,它们可以用于记录请求日志、身份验证、异常处理等操作。使用FastAPI的拦截器可以很方便地实现这些操作,例如: ```python from fastapi import FastAPI, Request app = FastAPI() @app.middleware("http") async def log_requests(request: Request, call_next): """ 记录请求日志的拦截器 """ print(f"Received request: {request.method} {request.url}") response = await call_next(request) print(f"Sent response: {response.status_code}") return response ``` 在这个例子中,我们定义了一个记录请求日志的拦截器,它会在每次请求到达路由处理函数之前打印请求信息,并在响应返回后打印响应信息。这个拦截器使用了FastAPI的`middleware`装饰器,它指定了拦截器的类型为`http`,表示它要处理HTTP请求。 过滤器是在请求到达路由处理函数之前执行的一系列操作,它们可以用于身份验证、请求参数校验等操作。使用FastAPI的过滤器可以很方便地实现这些操作,例如: ```python from fastapi import FastAPI, Depends app = FastAPI() async def check_token(token: str): """ 检查token的依赖性 """ if token != "secret_token": raise HTTPException(status_code=401, detail="Invalid token") @app.get("/") async def read_root(token: str = Depends(check_token)): """ 需要token验证的路由处理函数 """ return {"Hello": "World"} ``` 在这个例子中,我们定义了一个需要token验证的路由处理函数,并使用了`Depends`装饰器来指定依赖性。这个依赖性函数`check_token`会在请求到达路由处理函数之前执行,它会检查请求中的token参数是否正确。如果token不正确,则会抛出一个HTTP异常,返回401错误码。 希望这些信息能够帮助您了解FastAPI中的拦截器和过滤器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值