【Python】创建简单的Python微服务Demo与FastAPI

创建简单的Python微服务Demo与FastAPI

在微服务架构中,通过FastAPI框架创建一个简单的Python微服务Demo涉及多个步骤,包括定义服务、使用框架、进行通信等。在这篇文章中,我们将使用FastAPI框架创建两个简单的微服务,它们通过RESTful API进行通信。

首先,确保你已经安装了FastAPI和uvicorn,可以使用以下命令安装:

bash 复制代码
pip install fastapi uvicorn

然后,我们创建两个微服务:

微服务1:用户服务 (user_service.py)

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    return {"user_id": user_id, "username": f"user{user_id}"}

微服务2:订单服务 (order_service.py)

python 复制代码
from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/orders/{order_id}")
async def read_order(order_id: int):
    if order_id <= 0:
        raise HTTPException(status_code=400, detail="Invalid order ID")
    return {"order_id": order_id, "status": "processed"}

然后,我们可以使用uvicorn命令来运行这两个微服务:

bash 复制代码
uvicorn user_service:app --host 0.0.0.0 --port 8000 --reload
bash 复制代码
uvicorn order_service:app --host 0.0.0.0 --port 8001 --reload

现在,你有两个微服务在不同的端口上运行。user_service提供了获取用户信息的接口,而order_service提供了获取订单信息的接口。

微服务通信:

我们可以使用httpx库来模拟微服务之间的通信。确保你已经安装了它:

bash 复制代码
pip install httpx

然后,可以创建一个简单的脚本 (communication_demo.py) 来演示微服务之间的通信:

python 复制代码
import httpx

async def get_user(user_id):
    async with httpx.AsyncClient() as client:
        response = await client.get(f"http://127.0.0.1:8000/users/{user_id}")
        return response.json()

async def get_order(order_id):
    async with httpx.AsyncClient() as client:
        response = await client.get(f"http://127.0.0.1:8001/orders/{order_id}")
        return response.json()

async def main():
    user_info = await get_user(1)
    print("User Info:", user_info)

    order_info = await get_order(1001)
    print("Order Info:", order_info)

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

在这个演示中,communication_demo.py 脚本通过调用 get_userget_order 函数来获取用户和订单信息。你可以运行这个脚本,看到微服务之间的通信效果。

这只是一个简单的微服务架构的Demo,实际的微服务架构可能涉及到更多的复杂性,如服务注册与发现、负载均衡、安全性等。

相关推荐
skywalk8163几秒前
ete3 和 ete4 是用于系统发育树(Phylogenetic Tree)分析、可视化及操作的Python科学计算库
开发语言·python
追风少年ii17 分钟前
多组学顶刊--肿瘤源性氨可被调节性T细胞代谢利用,进而强化对机体抗肿瘤免疫反应的抑制效应
python·分类·数据分析·空间·单细胞
xdpcxq102926 分钟前
Flask - 常见应用部署方案
后端·python·flask
henry10101041 分钟前
Python脚本 - 创建AWS月度预算
python·云计算·aws
Ivanqhz42 分钟前
数据流分析的核心格(Lattice)系统
开发语言·javascript·后端·python·算法·蓝桥杯·rust
琛説1 小时前
⚡PitchPPT:将PPT导出为高清全图PPT,并控制PPT文件大小在固定MB/GB以内【解析算法原理 · 作者谈】
windows·python·算法·github·powerpoint
csdn2015_1 小时前
MybatisPlus LambdaQueryChainWrapper 联合查询
开发语言·windows·python
好家伙VCC1 小时前
# 发散创新:基于 Go 语言打造高性能服务网格的实践与突破在微服务架构
java·python·微服务·架构·golang
-To be number.wan1 小时前
Python数据分析:pyecharts可视化
python·信息可视化·数据分析
好家伙VCC1 小时前
# BERT在中文文本分类中的实战优化:从模型微调到部署全流程在自然语言处理(NL
java·python·自然语言处理·分类·bert