首页 > 编程语言 >Python|通过FastAPI开发一个快速的WebAPI项目

Python|通过FastAPI开发一个快速的WebAPI项目

时间:2023-06-04 23:23:20浏览次数:53  
标签:WebAPI Python FastAPI app OpenAPI API 文档

前言

Python 如此受欢迎的众多原因之一是 Python 有大量成熟和稳定的库可供选择:

  • 网页开发有:DjangoFlask,提供了很好的网络开发体验和大量的有用文档
  • 机器学习有:scikit-learnKeras 等,提供了丰富的机器学习的包和数据处理和可视化工具。

FastAPI 是一个快速、轻量级的现代 API,与其他基于 Python 的 Web 框架(如 Flask 和 Django )相比,有一个更容易的学习曲线。FastAPI 相对较新,但它有一个不断增长的社区。它被广泛地用于构建网络 API 和部署机器学习模型。

正是因为大量的库和框架保证了 Python 拥有良好的开发速度和便利性,使 Python、Go 和 Rust 这样的新语言能够并驾齐驱,赢得大量的开发者的喜爱。

这里我实际体验下来确实是快,我的小网站,前台后台的API加起来也20-30个了,但是我从没有接触过API的开发到写完这些API,大概只花了一个星期,其中还有一半的时间是在学习FastAPI,推荐希望快速搭建网站的同学学习一下。

什么是 FastAPI ?

FastAPI 是一个用于开发网络 API 的新的 Python 框架,在过去几年中得到了普及。如果你打算使用 Python 进行 Web 开发,熟悉 FastAPI 将对你有好处。

FastAPI

文档fastapi.tiangolo.com

源码github.com/tiangolo/fa…

从官方文档来看,FastAPI 具有如下几个关键特性:

  • 快速:可与 NodeJSGo 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一
  • 高效编码:提高功能开发速度约 200% 至 300%。*
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

准备工作

创建虚拟环境和新建项目

首先,在 Python 项目中创建一个新的文件夹,然后创建一个新的虚拟环境,这里要在里你的Python项目的根目录下

python -m venv \web_env

这将确保我们安装的 Python 包与项目保持隔离。

激活虚拟环境

激活Python虚拟环境,不然你安装的包是在你默认的Python环境下的,这点一定要注意!

.\web_env\Scripts\activate

安装 FastAPI

pip install fastapi uvicorn

有了这些,你已经安装了 FastAPI 和 Uvicorn,并准备学习如何使用它们。FastAPI 是你用来建立你的 API 的框架,而 Uvicorn 是使用你建立的 API 来服务请求的服务器。那么开始写我们的API吧!

开始 HelloWorld 项目

在深入研究 Web 项目如何开发之前,我们可以在 FastAPI 中建立并运行传统的 "Hello World "应用程序。这可以证明我们的初始设置是正常工作的。

打开 Vim 或其他的 Python 编辑器,把下面的代码粘贴到一个叫做 main.py 的文件中。写入如下代码:

from fastapi import FastAPI # 1. 导入 FastAPI

app = FastAPI() # 2. 创建一个 FastAPI 实例

@app.get('/') # 3. 创建一个路径操作
async def root(): # 4. 定义路径操作函数
    return {"message": "Welcome to my Page"} # 5. 返回内容

这五行代码中,你已经创建了一个工作的 API 。如果你曾经使用过 Flask ,应该会比较熟悉。

  • 路由 @app.get('/'): 它告诉 FastAPI,当用户请求根 / 路径时,应该运行以下方法,这个@装饰器把我们的路由装饰到app中,类似Flask的@。
  • 方法定义 async def root() : 注意这个异步定义,这个方法将作为一个 Python3 协程 运行。如果你想了解更多关于并发性和 async 的信息,FastAPI 官方文档对其有一个很好的解释,以及是什么让 FastAPI 框架变得如此快速。

最后是返回语句,我们将数据发送到浏览器。

return {"message": "Welcome to my Page"}

正如你所期望的,访问这个端点将返回一个与上述字典相匹配的 JSON 响应数据。

最后,说得够多了,运行服务器看看它的运行情况吧!

uvicorn main:app --reload

启动成功如图所示:

image-20230604225706276

uvicorn main:app 命令含义如下:

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

如果不想每次都在终端输入指令来启动服务,可以在 main.py中这样写:

if __name__ == '__main__':
	uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True)

在输出中,会有一行信息像下面这样:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

该行显示了你的应用在本机所提供服务的 URL 地址���

说了这么多,我们打开浏览器访问 http://127.0.0.1:8000,可以看到如下的 JSON 响应:

{
    "message": "Welcome to my Page"
}

也可以运行 http://127.0.0.1:8000/docs ,运行这个服务器文档,可以看到基于 Swagger UI 自动生成的交互式 API 文档:

image-20230604230351283

FastAPI还提供了一个可选的 API 文档,在浏览器运行 http://127.0.0.1:8000/redoc,可以看到如下由 ReDoc 自动生成的文档,如图:

image-20230604225932838

OpenAPI

OpenAPI 规范(以前称为 Swagger 规范)是用于描述,生成,使用和可视化 RESTful Web 服务的机器可读接口文件的规范。

FastAPI 使用定义 API 的 OpenAPI 标准将你的所有 API 转换成 模式 (schema)。

模式

模式是对事物的一种定义或描述。它并非具体的实现代码,而只是抽象的描述。

API 模式

在这种场景下,OpenAPI 是一种规定如何定义 API 模式的规范。定义的 OpenAPI 模式将包括你的 API 路径,以及它们可能使用的参数等等。

数据模式

模式这个术语也可能指的是某些数据比如 JSON 的结构。在这种情况下,它可以表示 JSON 的属性及其具有的数据类型,等等。

OpenAPI 和 JSON Schema

OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送和接收的数据的定义(或称为 Schema,模式),这些定义通过 JSON 数据模式标准 JSON Schema 所生成。

FastAPI 中 OpenAPI 的用途

驱动 FastAPI 内置的 2 个交互式文档系统的正是 OpenAPI 模式。

并且还有数十种替代方案,它们全部都基于 OpenAPI。你可以轻松地将这些替代方案中的任何一种添加到使用 FastAPI 构建的应用程序中。

你还可以使用它自动生成与你的 API 进行通信的客户端代码。例如 web 前端,移动端或物联网嵌入程序。

标签:WebAPI,Python,FastAPI,app,OpenAPI,API,文档
From: https://www.cnblogs.com/tangjielin/p/17456684.html

相关文章

  • Python网络爬虫对汽车团购报名的爬取及分析
    一、选题的背景(10分)现如今汽车已逐步进入家庭中,对于一些准备购入新车的家庭,犹豫不决,不知道现在市场上与车友们推荐的哪些车,此次爬虫项目将对网上的团购排名进行爬取,更能简单直观的让大家依据个人情况来挑选自己中意的车辆详情。二、设计方案(20分)主题式网络爬虫名称    ......
  • Python程序与设计
    2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加代码的可读性运算......
  • 一文教你玩转 TDengine 3.0.4.0 重要特性 Python UDF
    TDengine3.0.4.0发布了一个重要特性:支持用Python语言编写的自定义函数(UDF)。这个特性极大节省了UDF开发的时间成本。作为时序大数据处理平台,不支持PythonUDF显然是不完整的。UDF在实现自己业务中特有的逻辑时非常有用,比如量化交易场景计算自研的交易信号。本文内容由浅入......
  • python3类型标记
    1、介绍python是解释型数据类型,变量名称所指向的数据的类型由赋予的数据决定。一般情况下,ide是能够结合上下文环境分析确定变量类型的,进而提供其类型对应的属性和方法。但是,对于另外一些场景,则无法进行直接分析。类型标记机制,允许开发者对变量名称进行类型标记,以帮助ide提示。......
  • python计算收益率
     importpandasaspdimportnumpyasnpimportwarningswarnings.filterwarnings("ignore")pd.options.plotting.backend="plotly"#从csv文件获取数据data=pd.read_csv('testPandasShit.csv',sep='\s+')pd.set_option('......
  • 【python基础】复杂数据类型-列表类型(元组)
    1.初识元组列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。然而,有时候需要创建一系列不可修改的元素,元组可以满足这种需求python将不能修改的值称为不可变的,而不可变的列表被称为元组。元组看起来犹如列表,但使用圆括号而不是方括号来标识。其语法格......
  • 【python基础】复杂数据类型-列表类型
    复杂数据类型-列表类型-学习目录列表-增删改查列表-排序/长度/遍历列表-数值列表列表-列表切片列表-元组......
  • 让你的代码动起来:Python进度条神器tqdm详解及应用实例
    各位Python高手,今天我要给大家介绍一个好用的库,它就是:tqdmtqdm在阿拉伯语中的意思是"进展",所以这个库也被称为"快速进展条"。不得不说,这个名字真的很有创意!让我们想象一下,你正在运行一个耗时的数据处理任务或者训练一个复杂的深度学习模型。你坐在那里,盯着屏幕,焦急地等待程序......
  • python打开文件时的mode选择
    常用:追加:a覆盖:wModeDescriptionExamplerReadmode.Opensthefileforreading(defaultmode).Ifthefiledoesn’texist,anerrorwillberaised.file=open('example.txt','r')wWritemode.Opensthefileforwriting.Ifth......
  • python tkinter scale 滑动选择刻度条
    tkinter.Scale(d_f,from_=0,to=20,tickinterval=5,orient="horizontal")1.参数汇总归纳总结Scale组件中一些常用的参数以及用法。 2.方法汇总coords(value=None)获得当前滑块的位置对应Scale组件左上角的相对坐标如果设置value参数,则返回当滑块所在该位置......