FastAPI 核心概念:构建高性能的 Python Web 服务

FastAPI 核心概念:构建高性能的 Python Web 服务

本文详细解析了如何利用 FastAPI 构建高性能的 Python Web 服务,帮助开发者从零开始创建功能丰富、响应迅速的 API。结合完整的代码示例和分步操作指导,文章深入讲解了 FastAPI 的核心概念,包括路径、操作、装饰器、HTTP 方法等,带来直观清晰的学习体验。通过掌握路径操作装饰器的使用及 Uvicorn 的启动配置,你将能快速构建出强大、可靠的 Python Web 应用,夯实高效 API 开发的基础。

文章目录

  • FastAPI 核心概念:构建高性能的 Python Web 服务
      • 一 简单的 FastAPI 应用示例
      • 二 自定义 FastAPI 的实例对象
      • 三 自定义 uvicorn 启动
      • 四 术语
        • 1 路径
        • 2 操作
      • 五 定义一个路径操作装饰器
        • 1 装饰器
        • 2 解释说明
      • 六 返回内容
      • 七 完整代码示例
      • 八 源码地址

一 简单的 FastAPI 应用示例

# 从fastapi库导入FastAPI类,用于创建FastAPI应用实例
from fastapi import FastAPI# 创建一个FastAPI应用实例,app将作为应用的入口
app = FastAPI()# 使用@app.get("/")装饰器定义一个GET请求的路由
# 当用户访问根路径 ("/") 时,FastAPI会调用下面的函数
@app.get("/")
async def root():# 定义返回的响应内容,这里返回一个JSON对象 {"message": "Hello World"}return {"message": "Hello World"}

FastAPI 是一个为 API 提供功能的 Python 类,直接从 Starlette 继承。可以通过 FastAPI 使用所有 Starlette 的功能。app 同样会被 uvicorn 所引用。

$ uvicorn main:app --reload

注释:

uvicorn main:app 命令含义如下:

  • mainmain.py 文件(Python 模块)。
  • app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
  • --reload:让服务器在更新代码后重新启动,仅在开发时使用该选项。

二 自定义 FastAPI 的实例对象

from fastapi import FastAPI# FastAPI 的实例对象
my_awesome_api = FastAPI()@my_awesome_api.get("/")
async def root():return {"message": "Hello World"}

自定义 my_awesome_api 对象,将 app 改为 my_awesome_api,对应的装饰器也改为 @my_awesome_api

三 自定义 uvicorn 启动

将代码放入 main.py 文件中,然后可以像下面这样运行 uvicorn

$ uvicorn main:my_awesome_api --reloadINFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

如果代码放入了 chapter01.py 文件中,可以像下面运行 uvicorn

$ uvicorn chapter01:my_awesome_api --reload

四 术语

1 路径

路径:也称为端点或路由,指的是 URL 中从第一个 / 起的部分。例如,URL https://example.com/items/foo 的路径是 /items/foo。开发 API 时,路径用于分离 关注点资源

2 操作

操作:指的是一种 HTTP 方法。

常见操作少见操作
POSTOPTIONS
GETHEAD
PUTPATCH
DELETETRACE

在 HTTP 协议中,可以使用上述方法之一(或多种)与每个路径进行通信。在开发 API 时,可以使用特定的 HTTP 方法执行特定行为。

HTTP 方法特定行为
POST创建数据
GET读取数据
PUT更新数据
DELETE删除数据

五 定义一个路径操作装饰器

from fastapi import FastAPIapp = FastAPI()# 一个路径操作装饰器
@app.get("/")
async def root():return {"message": "Hello World"}

@app.get("/") 告诉 FastAPI 下方的函数负责处理如下访问请求:

  • 请求路径为 /
  • 使用 GET 操作
1 装饰器

@decorator 语法在 Python 中被称为 装饰器装饰器 告诉 FastAPI 下方的函数对应着 路径 / 加上 GET 操作,是一个 路径操作装饰器。FastAPI 中的装饰器对应 HTTP 方法如下:

路径操作装饰器HTTP 方法
@app.get()GET
@app.post()POST
@app.put()PUT
@app.delete()DELETE
@app.options()OPTIONS
@app.head()HEAD
@app.patch()PATCH
@app.trace()TRACE

FastAPI 没有强制要求操作有任何特定含义,可以随意使用任何操作(HTTP 方法),但一般在实际项目中习惯使用 GET/POST。

2 解释说明

这是一个路径操作函数:

  • 路径/
  • 操作GET
  • 函数:位于装饰器下方的函数
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}

这是一个 Python 函数,每当 FastAPI 接收一个使用 GET 方法访问 URL / 的请求时,该函数会被调用。在这个例子中,这是一个 async 函数,也可以将其定义成常规函数而不使用 async def

from fastapi import FastAPIapp = FastAPI()@app.get("/")
def root():return {"message": "Hello World"}

有关 async defdef 的更多信息可以查看 官方文档 。

六 返回内容

from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}

可以返回 dictlist,或者单个值,如 strint 等。当前示例返回 JSON

七 完整代码示例

from fastapi import FastAPI# 启动命令:uvicorn chapter01:app --reload 
app = FastAPI()@app.get("/")
async def root():return {"message": "Hello World! app"}# 启动命令:uvicorn chapter01:my_awesome_api --reload 
my_awesome_api = FastAPI()@my_awesome_api.get("/")
async def root():return {"message": "Hello World!my_awesome_api"}

八 源码地址

详情见:GitHub FastApiProj

引用: FastAPI 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶

CustomScrollView 效果 1. 关键组件 CustomScrollView, SliverOverlapAbsorber, SliverPersistentHeader 2. 关键内容 TLDR SliverOverlapAbsorber 包住 pinned为 true 的组件 可以被CustomScrollView 忽略高度。 以下的全部内容的都为了阐述上面这句话。初阶 Flutter 开发知…

Litctf-web

Litctf-web exx xxe&#xff0c; <?xml version"1.0" encoding"utf-8"?> <!DOCTYPE xxe [<!ELEMENT name ANY ><!ENTITY xxe SYSTEM "file:///flag" >]><user><username>&xxe;</username> …

线程模型介绍

线程模型的介绍 线程有三种模型&#xff1a;N:1用户线程模型&#xff0c;1:1核心线程模式&#xff0c;N:M混合线程模型 POSIX: Portable Operating System Interface(可移值操作系统接口) N&#xff1a;1用户线程模型 线程的实现建立在进程控制的机制之上&#xff0c;有用户…

2024 Rust现代实用教程:1.3获取rust的库国内源以及windows下的操作

文章目录 一、使用Cargo第三方库1.直接修改Cargo.toml2.使用cargo-edit插件3.设置国内源4.与windows下面的rust不同点 参考 一、使用Cargo第三方库 1.直接修改Cargo.toml rust语言的库&#xff1a;crate 黏贴至Cargo.toml 保存完毕之后&#xff0c;自动下载依赖 拷贝crat…

ML 系列:第 18 部 - 高级概率论:条件概率、随机变量和概率分布

文章目录 一、说明二、关于条件概率2.1 为什么我们说条件概率&#xff1f;2.2 为什么条件概率在统计学中很重要 三、 随机变量的定义3.1 定义3.2 条件概率中的随机变量 四、概率分布的定义五、结论 一、说明 条件概率是极其重要的概率概念&#xff0c;它是因果关系的数学表述&…

基于springboot的社区团购系统设计与实现

一、项目背景 网络交易&#xff08;Electronic Commerce&#xff09;&#xff1a;是指实现整个贸易过程中各阶段的贸易活动的电子化。网络交易是一种多技术的集合体。其业务可包括&#xff1a;信息交换、售后服务、销售、电子支付、运输、组建虚拟企业、公司和贸易伙伴可以共同…

一文读懂系列:SSL加密流量检测技术详解

SSL加密流量检测功能的主要目的是为了对加密流量做解密处理&#xff0c;并对解密后的流量做内容安全检查&#xff08;比如反病毒、入侵防御、URL远程查询、内容过滤、文件过滤和邮件过滤等&#xff09;和审计&#xff08;防止信息泄露&#xff09;。接下来我们详细介绍SSL加密流…

【C++】关联式容器

1.Set和Map 1.1 set的介绍 set是一个常用的关联式容器&#xff0c;它存储唯一的元素&#xff0c;这些元素默认情况下按照升序排序。其底层是一种自平衡的二叉搜索树(红黑树)。 set元素的键值就是实值&#xff0c;实值就是键值。set的元素允许插入删除但是不允许修改(具有const…

荣誉证书PSD素材(59套免费)

本作品提供荣誉证书PSD素材下载&#xff0c;格式为PSD&#xff1b; 请使用软件Photoshop进行编辑&#xff0c;作品中文字及图均可以通过软件修改和编辑&#xff1b; 点击下载: 荣誉证书PSD素材

第T6周:Tensorflow实现好莱坞明星识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 1.查询…

Spring6框架搭建(自用)

一、什么是Spring 众所不周知&#xff0c;Spring就是爪哇人的春天&#xff0c;但是在框架程序设计之前都绕不开javaWeb 1.javaWeb框架发展史 1、ServletJSPJavaBean(跳转页面、业务逻辑判断、数据库查询) 2、MVC三层架构(M Model pojo(User)V-view(USP)C-(controller-servl…

linux-UART

参考博客 https://blog.csdn.net/m0_38106923/article/details/126024970?sharetypeblog&shareId126024970&sharereferAPP&sharesourceweixin_40933496&sharefromlink 1.串口 UART的全称是Universal Asynchronous Receiver and Transmitter&#xff0c;即异步…

大数据治理:策略、技术与挑战

随着信息技术的飞速发展&#xff0c;大数据已经成为现代企业运营和决策的重要基础。然而&#xff0c;大数据的复杂性、多样性和规模性给数据管理带来了前所未有的挑战。因此&#xff0c;大数据治理应运而生&#xff0c;成为确保数据质量、合规性、安全性和可用性的关键手段。本…

vue插件清除 所有console.log()

一、作用 1、提升性能console.log() 语句会消耗一定的性能&#xff0c;尤其是在频繁调用的情况下。在生产环境中移除这些语句可以提高应用的运行效率。 2、减少信息泄露console.log() 可以输出敏感信息&#xff08;如用户数据、API 响应等&#xff09;。在生产环境中&#xf…

DAY15|二叉树Part03|LeetCode: 513.找树左下角的值、112. 路径总和、106. 从中序与后序遍历序列构造二叉树

LeetCode: 513.找树左下角的值 力扣代码链接 文字讲解&#xff1a;LeetCode: 513.找树左下角的值 视频讲解&#xff1a;怎么找二叉树的左下角&#xff1f; 递归中又带回溯了&#xff0c;怎么办&#xff1f; 基本思路 对题目进行一下分析&#xff0c;要找二叉树最底层最左边节点…

ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力

新版本发布 ClkLog在上线近1年后&#xff0c;获得了客户的一致肯定与好评&#xff0c;并收到了不少客户对功能需求的反馈。根据客户的反馈&#xff0c;我们在今年三季度对ClkLog的版本进行了重新的规划与调整&#xff0c;简化了原有的版本类型&#xff0c;方便客户进行选择。 与…

C++:set和map的使用

目录 序列式容器和关联式容器 set set类的介绍 构造和迭代器 增删查 insert find和erase erase迭代器失效 lower_bound与upper_bound multiset和set的区别 map map类的介绍 pair类型介绍 构造和迭代器 增删查 map数据修改&#xff1a;重载operator[] multimap…

Unix和Linux系统中的文件权限

详细解释Unix和Linux系统中的文件权限设置以及如何使用chmod命令来修改这些权限。 文件权限的详细解释 在Unix和Linux系统中&#xff0c;文件权限是控制谁可以访问和操作文件或目录的重要机制。权限分为三类&#xff1a;所有者&#xff08;owner&#xff09;、所属组&#xf…

android定时器循环实现轮播图

说明&#xff1a; android定时器加for循环实现轮播图 效果&#xff1a; step1: package com.example.iosdialogdemo;import android.os.Bundle; import android.os.Handler; import android.widget.ImageView; import android.widget.TextView;import androidx.appcompat.ap…

ChatGPT能预测时间序列?基于大模型的时间序列预测中的迭代事件推理_chatgpt能预测时间序列

引言 时间序列预测&#xff08;Time Series Forecasting&#xff09;是支撑经济、基础设施和社会各领域决策的关键技术。然而&#xff0c;传统的预测方法在面对由外部随机事件引起的突发性变化或异常时&#xff0c;往往表现出局限性。这些方法通常依赖于历史数据的模式识别&am…