• FastAPI 学习之路(十二)接口几个额外信息和额外数据类型


    一,额外信息

     

    我们有这样的一个需求,我们希望可以看到接口的一个简单的请求示例展示在我们的接口文档中,应该如何实现呢。我们看下如何实现的:

    1. from fastapi import FastAPI
    2. from typing import Optional
    3. from pydantic import BaseModel
    4. app = FastAPI()
    5. class Item(BaseModel):
    6. name: str
    7. description: Optional[str] = None
    8. price: float
    9. tax: Optional[float] = None
    10. class Config:
    11. schema_extra = {
    12. # 这里就会展示在接口文档中
    13. "example": {
    14. "name": "lc",
    15. "description": "这是描述信息",
    16. "price": 300,
    17. "tax": 0.7
    18. }
    19. }
    20. @app.post("/items")
    21. def return_item(item: Item):
    22. result = {"item": item}
    23. return result

     我们请求下试试

    接口满足我们的请求,我们看下接口文档是否有请求的示例。

    接口文档是正常有这个的示例。代码中使用Config 和 schema_extra 为Pydantic模型声明一个简单的示例。

    其实我们在Field也会可以实现一个额外的信息,比如我们增加一个example字段,我们看下如何实现的,带来什么样的效果

    1. from fastapi import FastAPI
    2. from typing import Optional
    3. from pydantic import BaseModel, Field
    4. app = FastAPI()
    5. class Item(BaseModel):
    6. name: str
    7. description: Optional[str] = None
    8. price: float = Field(..., example=300)
    9. tax: Optional[float] = Field(None, example=0.6)
    10. @app.post("/items")
    11. def return_item(item: Item):
    12. result = {"item": item}
    13. return result

    我们看下效果,正常的接口请求没有变动。

     我们看下接口的文档。文档在解析的时候,会解析出来这个额外的信息。

     当然像Body,Path等也都可以增加这些参数。

    二、 额外数据类型

    到目前为止,您一直在使用常见的数据类型,如:

            int, float, str, bool

    但是您也可以使用更复杂的数据类型。

    您仍然会拥有现在已经看到的相同的特性:

    • 很棒的编辑器支持。
    • 传入请求的数据转换。
    • 响应数据转换。
    • 数据验证。
    • 自动补全和文档。

    其他数据类型

    下面是一些你可以使用的其他数据类型:

    • UUID:        
      • 一种标准的 "通用唯一标识符" ,在许多数据库和系统中用作ID。
      • 在请求和响应中将以 str 表示    
    • datetime.datetime:
      • 一个 Python datetime.datetime.
      • 在请求和响应中将表示为 ISO 8601 格式的 str ,比如: 2008-09-15T15:53:00+05:00.
    • datetime.date:
      • Python datetime.date.
      • 在请求和响应中将表示为 ISO 8601 格式的 str ,比如: 2008-09-15.
    • datetime.time:
      • 一个 Python datetime.time.
      • 在请求和响应中将表示为 ISO 8601 格式的 str ,比如: 14:23:55.003.
    • datetime.timedelta:
      • 一个 Python datetime.timedelta.
      • 在请求和响应中将表示为 float 代表总秒数。
      • Pydantic 也允许将其表示为 "ISO 8601 时间差异编码", 查看文档了解更多信息。
    • frozenset:
      • 在请求中,列表将被读取,消除重复,并将其转换为一个 set。
      • 在响应中 set 将被转换为 list 。
      • 产生的模式将指定那些 set 的值是唯一的 (使用 JSON 模式的 uniqueItems)。
      • 在请求和响应中,作为 set 对待:
    • bytes:
      • 标准的 Python bytes。
      • 在请求和相应中被当作 str 处理。
      • 生成的模式将指定这个 str 是 binary "格式"。
    • Decimal:
      • 标准的 Python Decimal。
      • 在请求和相应中被当做 float 一样处理。 

     下面是一个接口操作的示例,其中的参数使用了上面的一些类型。

    1. from fastapi import FastAPI, Body
    2. from typing import Optional
    3. from pydantic import BaseModel, Field
    4. from uuid import UUID
    5. from datetime import datetime, timedelta, time
    6. app = FastAPI()
    7. @app.post("/items/{item_id}")
    8. def return_item(
    9. item_id: UUID,
    10. start_time: Optional[datetime] = Body(None),
    11. end_time: Optional[datetime] = Body(None),
    12. after: Optional[timedelta] = Body(None)
    13. ):
    14. start_process = start_time
    15. duration = end_time - start_time
    16. return {
    17. "id": item_id,
    18. "start_datetime": start_time,
    19. "end_datetime": end_time,
    20. "after": after,
    21. "start_process": start_process,
    22. "duration": duration
    23. }

    那么我们看下接口文档的请求

    UUId来源        http://www.uuid.online/可以生成。

    这样就是我们利用了这些参数的一个请求。

  • 相关阅读:
    套接字、信号、管道、消息队列、信号量、共享内存的使用场景
    C语言入门 Day_13 二维数组
    docker 安装mysql完美教程 建议收藏
    阿里云服务器快照收费怎么停止?
    数据结构之循环链表(C语言)
    我理解的反射
    Mac Pro 突然不能双击打开文件夹
    FLUX.1 实测,堪比 Midjourney 的开源 AI 绘画模型,无需本地显卡,带你免费实战
    【CV】第 14 章:用最少的数据点训练
    java毕业生设计药品管理系统演示录像2021计算机源码+系统+mysql+调试部署+lw
  • 原文地址:https://blog.csdn.net/myli_binbin/article/details/126541958