当前位置: 首页 > article >正文

FlaskAPI-初识

1 简介

Flask API 是 Flask 的直接替代品,它提供类似于 Django REST 框架提供的可浏览 API的实现。它为你提供适当的内容协商响应和智能请求解析。这是官网的解释,那我们用Flask框架来介绍Flask API。

Flask是一个基于 WSGI(Web Server Gateway Interface)的 Web 框架。WSGI 是一种规范,它定义了 Web 服务器和 Python Web 应用程序之间的接口。Flask 本身遵循这个规范,使得它可以和各种支持 WSGI 的服务器(如 Gunicorn)一起工作。然而,WSGI 有一些局限性。它是同步的,在处理高并发场景(如大量的同时请求)时效率相对较低。例如,当一个请求在等待数据库查询结果或者进行一些耗时的 I/O 操作时,整个线程会被阻塞,其他请求就需要等待。

ASGI(Asynchronous Server Gateway Interface)是 WSGI 的异步版本。它允许应用程序以异步的方式处理请求,能够更好地利用系统资源,提高应用程序的性能和并发处理能力。在现代的 Web 开发中,尤其是在处理大量实时通信(如 WebSockets)或者高并发的 API 场景下,ASGI 的优势就凸显出来了。比如在一个实时聊天应用中,多个用户同时发送消息,ASGI 服务器可以更高效地处理这些并发的 WebSocket 连接。

Uvicorn是ASGI服务器的实现,它基于 uvloop 和 httptools 构建。uvloop 是一个用 Cython 编写的高性能 Python 异步 I/O 循环库,它比标准的 asyncio 事件循环要快很多。Uvicorn 在性能方面表现出色,能够快速地处理请求。例如,在处理大量的 API 请求时,它可以利用异步 I/O,减少请求的等待时间,提高吞吐量。它还支持 HTTP/1.1 和 HTTP/2 协议,能够更好地适应现代网络环境。

2 第一个程序

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

3 启动方式

3.1 命令行启动

uvicorn flask_demo.main:app --reload 
  • uvicorn是启动服务器的命令。

  • main:app是一个参数,它指定了应用的位置。其中main是 Python 模块的名称(通常是一个.py文件,在这里是main.py,但在命令中不需要写.py后缀),app是在main模块中定义的 ASGI 应用对象(例如在 FastAPI 应用中,app = FastAPI()这一行定义的app对象)。

  • –reload是一个可选的参数。它的作用是开启自动重载功能,当然还有其他可选参数例如port、host等。

这是目录的结构:

my_project/
    ├── fask_demo/
    │   └── main.py
    └── other_files/

uvicorn 启动命令中:前的代表包含ASGI实例对象文件的位置,层级用.隔开

3. 2 uvicorn.run方法

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

if __name__ == '__main__':
    uvicorn.run(app)

当然我们还可以设置一些参数,下面是一些常用参数:

参数描述默认值示例值
app要运行的ASGI应用对象,通常是在模块中定义的如FastAPI或Starlette应用实例。app(假设app是在当前模块中定义的应用对象)
host服务器监听的主机地址。127.0.0.10.0.0.0(可以从外部访问)
port服务器监听的端口号。80008080
reload是否开启自动重载功能。当代码文件发生变化时自动重新加载应用。FalseTrue(用于开发环境)
workers工作进程数,用于处理多个并发请求。在生产环境中可以通过增加工作进程来提高性能。14(根据服务器资源和负载情况设置)
loop指定事件循环类型。如uvloop可以提高性能(如果已安装)。auto(自动选择合适的循环)uvloop(如果安装了uvloop
http指定HTTP协议实现。如h11httptoolsauto(自动选择合适的实现)httptools(如果安装了httptools
ws指定WebSocket协议实现。auto(自动选择合适的实现)websockets(如果安装了websockets
lifespanASGI应用生命周期管理。用于处理应用启动和关闭时的事件。auto(自动遵循应用定义)on(手动开启生命周期管理)
interface指定服务器接口类型,如asgi3asgi2。用于兼容不同版本的ASGI规范。asgi3asgi2(如果应用遵循ASGI 2规范)
env_file指定环境变量文件路径。文件中的环境变量会被加载用于配置应用。".env"(当前目录下的.env文件)

http://www.kler.cn/a/454472.html

相关文章:

  • 可灵1.6正式上线,图生视频再创新视界
  • scala基础学习(数据类型)-数组
  • 通过Js动态控制Bootstrap模态框-弹窗效果
  • 【玩转MacBook】Git安装
  • 【CSS in Depth 2 精译_094】16.2:CSS 变换在动效中的应用(下)——导航菜单的文本标签“飞入”特效与交错渲染效果的实现
  • 游戏引擎学习第62天
  • IP地址怎么切换到别的省份?ip可以用什么办法切换
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
  • 【LeetCode 面试经典150题】详细题解之滑动窗口篇
  • [数据结构]图——C++描述
  • 青少年编程与数学 02-004 Go语言Web编程 21课题、应用部署
  • Java重要面试名词整理(五):Redis
  • Linux网络功能 - 服务和客户端程序CS架构和简单web服务示例
  • #B1630. 数字走向4
  • 华为云计算HCIE笔记05
  • Conda使用命令大全
  • 海康RGBD相机使用C++和Opencv采集图像记录
  • vue3入门教程:Class和Style绑定
  • Oracle 数据库执行计划的查看与分析技巧
  • 「下载」阿里云智慧办公园区解决方案:打造全息数字园区,助力商业地产数字化转型
  • 观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?
  • 亚远景-ISO 21434标准下的汽车网络安全:风险评估与管理的关键实践
  • springboot485基于springboot的宠物健康顾问系统(论文+源码)_kaic
  • 每日小题打卡
  • AI多模态技术介绍:理解多模态大语言模型的原理
  • 华为OD E卷(100分)38-数组拼接