FastAPI学习-9. Swagger文档输出请求示例example

2023-05-16

前言

可以在 Swagger文档上看到请求示例example,使用Pydantic schema_extra属性来实现。

schema_extra

使用 Config 和 schema_extra 为Pydantic模型声明一个示例,如Pydantic 文档:定制 Schema 中所述:

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


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

    class Config:
        schema_extra = {
            "example": {
                "name": "Foo",
                "description": "A very nice Item",
                "price": 35.4,
                "tax": 3.2,
            }
        }


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
    results = {"item_id": item_id, "item": item}
    return results

这些额外的信息将按原样添加到输出的JSON模式中。

Field 的附加参数

在 Field, Path, Query, Body 和其他你之后将会看到的工厂函数,你可以为JSON 模式声明额外信息,你也可以通过给工厂函数传递其他的任意参数来给JSON 模式声明额外信息,比如增加 example:

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str = Field(..., example="Foo")
    description: Optional[str] = Field(None, example="A very nice Item")
    price: float = Field(..., example=35.4)
    tax: Optional[float] = Field(None, example=3.2)


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
    results = {"item_id": item_id, "item": item}
    return results

请记住,传递的那些额外参数不会添加任何验证,只会添加注释,用于文档的目的。

Body 额外参数

你可以通过传递额外信息给 Field 同样的方式操作Path, Query, Body等。
比如,你可以将请求体的一个 example 传递给 Body:

from typing import Optional

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()


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


@app.put("/items/{item_id}")
async def update_item(
    item_id: int,
    item: Item = Body(
        ...,
        example={
            "name": "Foo",
            "description": "A very nice Item",
            "price": 35.4,
            "tax": 3.2,
        },
    ),
):
    results = {"item_id": item_id, "item": item}
    return results

文档 UI 中的例子

使用上面的任何方法,它在 /docs 中看起来都是这样的:

技术细节

关于 example 和 examples…
JSON Schema在最新的一个版本中定义了一个字段 examples ,但是 OpenAPI 基于之前的一个旧版JSON Schema,并没有 examples.
所以 OpenAPI为了相似的目的定义了自己的 example (使用 example, 而不是 examples), 这也是文档 UI 所使用的 (使用 Swagger UI).
所以,虽然 example 不是JSON Schema的一部分,但它是OpenAPI的一部分,这将被文档UI使用。

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastAPI学习-9. Swagger文档输出请求示例example 的相关文章

随机推荐

  • this.$refs[‘form‘].resetFields()方法重置表单无效的坑

    this refs form resetFields 方法重置表单无效的坑 1 用法不对 要想this refs form resetFields 方法有效 xff0c 必须配置el form model 属性和el form item中的
  • vue 删除数组中的某一条数据

    一 删除普通数组 let arr 61 1 2 3 4 5 方法一 let index 61 arr indexOf 39 3 39 arr splice index 1 打印结果 1 2 4 5 方法二 let index 61 arr
  • VUE3中watch和watchEffect的用法

    watch和watchEffect都是监听器 xff0c 但在写法和使用上有所区别 watch在监听 ref 类型时和监听reactive类型时watch函数的写发有所不一样 watch在监听 ref 类型时 xff1a lt script
  • vue项目中遇到的问题 cannot find module “imagemin-gifsicle“

    1 vue项目启动报错信息 error cannot find module imagemin gifsicle 解决方案 xff1a 在packgae json 加上 imagemin gifsicle 如图 xff1a 再次运行时报错信
  • 应届生求职简历HTML模板

    优秀的简历需要具备哪些要素 xff1f 1 逻辑清晰 有条有理 HR面临的动辄几百上千份简历 xff0c 简历需要在5秒内让HR能够get到所有重要信息 2 重点突出 xff0c 简历有亮点用成绩说话 xff01 奖学金 xff0c 荣誉奖
  • 终于理清楚了Promise以及async和await

    promise理解 xff1a 1 xff0c 是js异步编程的新的解决方案 2 xff0c 是一个构造函数 3 xff0c 用来封装一个异步操作 xff0c 并可以获得其结果 promise三个状态 xff1a 1 xff0c pendd
  • 青龙脚本合集(不定期更新版)

    京东pangbai66 ql repo https github com pangbai6 pangbai66 git 34 jd jx gua jddj getJDCookie 34 34 activity backUp 34 34 jd
  • antd vue 表格rowSelection选择框功能的使用

    html部分 xff1a lt a table columns 61 34 columns 34 data source 61 34 showList 34 row selection 61 34 rowSelection 34 rowKe
  • fastjson报错:write javaBean error, fastjson version 1.2.76, class io.undertow.servlet.xx,已解决

    错误信息 xff1a com alibaba fastjson JSONException write javaBean error fastjson version 1 2 76 class io undertow servlet spe
  • Java项目个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取 xff1a 博客首页 资源 里下载 xff01 一 项目简述 本系统功能包括 xff1a 文章展示 热门文章 文章分类 标签云用户登录评论 匿名评论用户留言 匿名留言评论管理 文章发布 文章管理文章数据统计等等 xff0e 二 项
  • markdown源码

    此文章与http blog csdn net baidu 27435045 article details 52943414为对照博客 此篇为markdown源码 xff0c 另一篇为markdown显示出来的样式 在文字写书写不同数量的
  • npm错误 gyp错误 vs版本不对 msvs_version不兼容

    npm错误 gyp错误 vs版本不对msvs version 不兼容 windows SDK 报错 执行更新GYP 语句第一种方案第二种方案 执行更新GYP 语句 npm install g node gyp 最新的GYP 好像已经不支持P
  • uniapp实现购物车功能

    uniapp实现购物车功能 周六我看见一个有个公司招聘需要试岗3天 xff0c 并使用uniapp完成购物车 xff0c 直播间 xff0c 地图 xff0c 首页四个功能方能通过 xff0c 于是乎 xff0c 我趁手上没事就打算自己写一
  • vue3 setup 语法糖

    Vue3官方提供了 script setup 语法糖 只需在script标签中添加setup xff0c 组件只需引入不用注册 xff0c 属性和方法也不用返回 xff0c 也不用写setup函数 xff0c 也不用写export defa
  • 5_04_GLib库入门与实践_线程池

    简介 线程池是在多线程编程时经常用到的技术 在进行多线程任务处理时 xff0c 如果线程频繁创建和销毁 xff0c 将会使系统开销变大 xff0c 在这种情况下 xff0c 上一个任务执行完后不销毁之前创建的线程 xff0c 后续任务重用该
  • codeforce#dp专项

    1 https codeforces com problemset problem 467 C 题意 给定一个长度为n的序列 xff0c 找到k个长度为m的子串 xff08 不是子序列 xff09 xff0c 求能得到的每个子串相加后的最大
  • Java MyBatis的介绍及其执行原理

    写在前面 MyBatis学习 今天我们进行MyBatis框架的学习 xff0c 认识MyBatis及其执行原理 xff0c 感谢你的阅读 xff0c 内容若有不当之处 xff0c 希望大家多多指正 xff0c 一起进步 xff01 xff0
  • Linux工作目录切换命令

    规则目录指的是用户在系统中所处的位置 xff0c 简单记录几个关于目录操作的命令 1 pwd命令 pwd命令用于显示当前用户所在的工作目录 root 64 ecs 168546 etc pwd etc 2 cd命令 cd命令用于切换工作路径
  • Pytorch Tensor 维度操作的形象理解 Tensor.unsqueeze() Tensor.squeeze()

    我们认为数组 矩阵 张量都是有形状的 xff0c 假如有一个形状是 2 2 3 的张量 a xff0c 从左到右称为第0维 第1维 第2维 我可以使用 a 1 取出第0维视角下的第1组数据 xff0c 可以使用 a 0 看到第2维视角下的第
  • FastAPI学习-9. Swagger文档输出请求示例example

    前言 可以在 Swagger文档上看到请求示例example xff0c 使用Pydantic schema extra属性来实现 schema extra 使用 Config 和 schema extra 为Pydantic模型声明一个示