python高效web API开发库FastAPI快速入门教程2路径参数和类型及接收json数据

路径参数

可以用类似Python格式化字符串使用的相同语法来声明路径参数或变量。

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id):
    return {"item_id": item_id}

路径参数item_id的值将递给你的函数。

打开http://127.0.0.1:8000/items/foo,你会看到这样的响应。

{"item_id":"foo"}

可以在函数中使用标准的 Python 类型提示来声明路径参数的类型。

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

声明路径参数的类型将给你的函数提供编辑器支持,包括错误检查、自动完成等。

打开http://127.0.0.1:8000/items/3,那么你会看到下面的响应。

{"item_id":3}

打开http://127.0.0.1:8000/items/foo,将有HTTP错误。

{
    "detail": [
        {
            "loc": [
                "path",
                "item_id"
            ],
            "msg": "value is not a valid integer",
            "type": "type_error.integer"
        }
    ]
}

打开http://127.0.0.1:8000/items/4.2也会有类似宝座,FastAPI同时提供了数据解析和数据验证。

打开浏览器http://127.0.0.1:8000/docs,文档也有更新。

http://127.0.0.1:8000/redoc如下:

所有的数据验证都是由pydantic在幕后进行的,可以对str、float、bool以及许多其他复杂的数据类型使用相同的类型声明。

路径的顺序很重要,固定路径建议放在首位。比如同时/users/me和/users/{user_id}这样的路径来获取某个特定用户的ID的数据。

from fastapi import FastAPI

app = FastAPI()

@app.get("/users/me")
async def read_user_me():
    return {"user_id": "the current user"}

@app.get("/users/{user_id}")
async def read_user(user_id: str):
    return {"user_id": user_id}

请求体接收JSON数据

请求主体是由客户发送给你的API的数据。响应体是你的API发送给客户端的数据。你的API几乎总是要发送响应体。但是客户并不一定需要发送请求体。

注意:要发送数据,你应该使用POST(最常见的方法)、PUT、DELETE或PATCH。用GET请求发送主体在规范中没有定义行为。

尽管如此,FastAPI还是支持使用GET请求,不过只适用于非常复杂或极端的用例。由于不鼓励使用GET,所以在使用GET时,Swagger UI的交互式文档不会显示body的文档,而且中间的代理可能不支持它。

使用pydantic来声明JSON数据模型(Data Models或Data Shapes)。
首先,你需要从pydantic中导入BaseModel,然后用它来创建定义你想要接收的模式或数据形状的子类。然后将你的数据模型声明为继承自BaseModel的类,所有属性使用标准的Python类型。


from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

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

app = FastAPI()

@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item):
    return {"item_id": item_id, **item.dict()}

astAPI将。

  • 读取请求的主体为JSON
  • 如果需要,转换相应的类型
  • 验证数据,如果是无效的,则返回明确的错误
  • 在参数项中给你收到的数据--因为你声明它是Item类型的,所以你也将得到所有编辑器的支持,对所有属性及其类型进行完成和类型检查
  • 为你的模型生成JSON Schema定义,你也可以在其他地方使用对你的项目有意义的定义。
  • 通过使用pydantic的标准类型提示,FastAPI可以帮助你构建默认拥有所有这些最佳实践的API,而不需要付出什么努力。

文档也会自动更新:

IDE的自动完成提示:

类型错误检查:


pydantic PyCharm插件来改善你的编辑器支持。VS Code,那么你就可以通过Pylance获得最好的开发者体验。

更多关于FastAPI的信息

  • 查询参数以定制请求: Query parameters
  • 依赖性注入来处理权限、数据库会话和其他方面的可重用逻辑: Dependency injection
  • 整合基于标准的认证和授权的安全实用程序: Security utilities
  • 用于简单操作的后台任务,如发送电子邮件通知:Background tasks
  • 支持并发的async和await以提高性能: async and await
  • 用于需要实时通信的高级场景的WebSockets:WebSockets
  • 多个文件构建更大的应用:Bigger applications

FastAPI可以涵盖后端框架所需的大部分用例,甚至包括那些不是严格意义上的API。你可以深入研究文档以解决你的特定用例。

其他资料:

  • Getting Started With Async Features in Python
  • Async IO in Python: A Complete Walkthrough
  • Python Type Checking (Guide)

小结

在本教程中,你了解了FastAPI,以及如何使用它来创建生产级的API。

  • 使用路径参数来获取每个项目的唯一URL路径
  • 使用pydantic在你的请求中接收JSON数据
  • 使用API最佳实践,如验证、序列化和文档
  • 继续学习FastAPI和pydantic的不同用例

你现在已经准备好开始为你的项目创建你自己的高性能的API了。如果你想更深入地了解FastAPI的世界,那么你可以遵循FastAPI文档中的官方 User Guide

你可能感兴趣的:(python高效web API开发库FastAPI快速入门教程2路径参数和类型及接收json数据)