美文网首页@IT·互联网
python的FastAPI, 你了解多少?

python的FastAPI, 你了解多少?

作者: shengjk1 | 来源:发表于2024-01-07 20:10 被阅读0次

FastAPI

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。


关键特性:

  • 快速:可与 NodeJSGo 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*

  • 智能:极佳的编辑器支持。处处皆可<abbr title="也被称为自动完成、智能感知" style="box-sizing: inherit; border-bottom: 0.05rem dotted var(--md-default-fg-color--light); cursor: help; text-decoration: none;">自动补全</abbr>,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

FastAPI安装

pip install fastapi
pip install uvicorn

FastAPI基本使用

get方法

from typing import Union

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: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

使用浏览器访问 http://127.0.0.1:8000/items/5?q=somequery

你将会看到如下 JSON 响应:

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

你已经创建了一个具有以下功能的 API:

  • 通过 路径 //items/{item_id} 接受 HTTP 请求。
  • 以上 路径 都接受 GET 操作(也被称为 HTTP 方法)。
  • /items/{item_id} 路径 有一个 路径参数 item_id 并且应该为 int 类型。
  • /items/{item_id} 路径 有一个可选的 str 类型的 查询参数 q

put方法

from typing import Union

from fastapi import FastAPI

app = FastAPI()

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

app.middleware

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 = call_next(request)
    print(f"Sent response: {response.status_code}")
    return response

@app.get("/")
def root():
    return {"message": "Hello, World!"}

在 FastAPI 中,app.middleware 是一个装饰器,用于注册中间件函数。中间件函数可以在请求处理函数执行前或执行后对请求和响应进行处理,例如添加请求头、记录日志、验证身份等。

其中,middleware_function 是中间件函数的名称,"http" 是中间件的类型,表示它是一个 HTTP 请求中间件。request 是请求对象,call_next 是一个回调函数,用于调用下一个中间件或请求处理函数。在中间件函数中,我们可以在调用 call_next(request) 前后对请求和响应进行处理。

在这个示例中,我们定义了一个名为 log_requests 的中间件函数,它会在每个请求处理前和处理后打印请求和响应的信息。然后我们使用 app.middleware 装饰器将其注册到应用程序中。最后,我们定义了一个 GET 请求处理函数 root,它返回一个 JSON 格式的响应。

app.exception_handle

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.exception_handler(ValueError)
async def value_error_handler(request, exc):
    raise HTTPException(status_code=400, detail=str(exc))

@app.get("/")
async def root():
    raise ValueError("Invalid query parameter")

@app.exception_handler 是 FastAPI 框架中的一个装饰器,用于处理应用程序中未处理的异常。当应用程序抛出未处理的异常时,FastAPI 将自动调用由 @app.exception_handler 装饰的函数,并将异常作为参数传递给该函数。这使得开发人员可以在应用程序中集中处理异常,而不必在每个路由处理程序中编写重复的异常处理代码。

在上面的代码中,当 root 路由处理程序抛出 ValueError 异常时,FastAPI 将自动调用 value_error_handler 函数,并将异常作为参数传递给该函数。value_error_handler 函数将异常转换为 HTTPException 并将其重新引发,从而返回一个带有 400 状态码和异常详细信息的 HTTP 响应。

参考

fastapi

相关文章

网友评论

    本文标题:python的FastAPI, 你了解多少?

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