FastAPI 教程

15.7 健康检查与就绪检查

FastAPI健康检查与就绪检查:Python初学者入门教程

FastAPI 教程

本教程面向有Python基础的初学者,无Web开发经验,通过生活化类比和动手实践,快速学习在FastAPI中实现健康检查与就绪检查,包含简单示例和成功时刻,帮助建立信心。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

FastAPI健康检查与就绪检查入门教程

引言

想象一下,你有一个在线商店应用。你需要确保应用一直正常运行(健康检查),同时当有新订单时,应用需要准备好处理请求,比如检查库存是否充足(就绪检查)。这就是健康检查和就绪检查在Web开发中的作用!

在这个教程中,作为Python初学者,你将学习如何使用FastAPI快速创建这些检查,并看到立即的成功结果。无Web开发经验也没关系,我们会一步步来。

什么是健康检查和就绪检查?

  • 健康检查:检查应用程序是否正在运行。这就像医生检查你的心跳——如果心跳正常,你就健康。在FastAPI中,我们创建一个端点,返回"健康"状态。
  • 就绪检查:检查应用程序是否准备好处理请求。这就像检查厨房是否备齐了食材——如果一切就绪,你就可以开始做饭了。在FastAPI中,这通常涉及检查数据库连接或外部服务是否可用。

生活化类比

  • 健康检查:汽车引擎是否启动?
  • 就绪检查:汽车油箱是否满,轮胎是否充气?

环境设置:启动你的第一个FastAPI应用

首先,确保你安装了Python(建议Python 3.7+)。然后,打开终端或命令提示符,安装FastAPI和Uvicorn(一个服务器):

pip install fastapi uvicorn

成功时刻:当安装完成无错误时,你已经准备好了!

第一步:创建基础FastAPI应用

让我们创建一个简单的应用来熟悉FastAPI。创建一个新文件 main.py

from fastapi import FastAPI

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

@app.get("/")  # 定义一个GET请求的端点
def read_root():
    return {"Hello": "World"}  # 返回一个简单的JSON响应

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)  # 运行服务器

保存文件,然后在终端运行:

python main.py

成功时刻:看到类似 "Uvicorn running on http://0.0.0.0:8000" 的消息。现在,打开浏览器访问 http://localhost:8000/,你会看到 {"Hello": "World"}。太棒了!你的第一个FastAPI应用运行起来了。

第二步:实现健康检查端点

健康检查很简单:我们添加一个端点来返回应用状态。修改 main.py

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/health")  # 添加健康检查端点
def health_check():
    return {"status": "healthy"}  # 直接返回健康状态

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

重新运行应用(如果已运行,按Ctrl+C停止,然后重新运行 python main.py)。

成功时刻:访问 http://localhost:8000/health,你会看到 {"status": "healthy"}。这意味着你的应用正在健康运行!

第三步:实现就绪检查端点

就绪检查可以更复杂,但我们会从一个简单的模拟开始。想象应用需要数据库连接来工作。我们用一个变量来模拟数据库状态。修改 main.py

from fastapi import FastAPI, HTTPException  # 导入HTTPException用于错误响应

app = FastAPI()

# 模拟数据库连接状态
database_ready = True  # 初始设置为就绪

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

@app.get("/health")
def health_check():
    return {"status": "healthy"}

@app.get("/ready")  # 添加就绪检查端点
def readiness_check():
    if database_ready:
        return {"status": "ready"}  # 如果数据库就绪,返回成功
    else:
        # 如果未就绪,返回错误
        raise HTTPException(status_code=503, detail="Database not ready")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

运行应用。

成功时刻:访问 http://localhost:8000/ready,你会看到 {"status": "ready"}。现在,改变代码,将 database_ready = False,然后重新运行应用,再次访问同一地址,你会看到一个错误页面,显示 "Database not ready"。这模拟了就绪检查失败的情况!

测试你的应用

为了全面测试,确保运行应用后测试所有端点:

  • http://localhost:8000/:首页,应返回 {"Hello": "World"}
  • http://localhost:8000/health:健康检查,应返回 {"status": "healthy"}
  • http://localhost:8000/ready:就绪检查,根据 database_ready 值变化响应

你可以使用浏览器,或者终端工具如 curl(例如,curl http://localhost:8000/health)。

总结和下一步

恭喜!你已经学会了在FastAPI中实现健康检查和就绪检查的基本方法。这为你部署和监控Web应用打下了基础。

回顾关键点

  • 健康检查:确保应用在运行,类似心跳检测。
  • 就绪检查:确保应用准备好处理请求,类似检查食材是否备齐。
  • 使用 @app.get() 来定义端点,并通过返回JSON或抛出异常来控制响应。

扩展想法:在实际项目中,你可以将就绪检查替换为真实的数据库查询或API调用,以动态检查依赖状态。

生活化类比

  • 健康检查:电话是否开机?
  • 就绪检查:电话是否有信号,电量是否充足?

保持实践,尝试修改代码,比如添加更多端点或模拟不同场景。你已经迈出了Web开发的第一步,继续前进!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包