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

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

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

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

pip install fastapi uvicorn

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

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

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)

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命令来运行这两个微服务:

uvicorn user_service:app --host 0.0.0.0 --port 8000 --reload

在这里插入图片描述

uvicorn order_service:app --host 0.0.0.0 --port 8001 --reload

在这里插入图片描述

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

微服务通信:

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

pip install httpx

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

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,实际的微服务架构可能涉及到更多的复杂性,如服务注册与发现、负载均衡、安全性等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s部署单机模式的minio

k8s部署单机模式的minio 一、说明二、yaml内容三、步骤3.1 创建资源3.2 查看启动日志3.2 查看svc并访问控制台 一、说明 项目使用minio&#xff0c;准备在k8s环境部署一套minio试用。 1.关于minio的原理和概念参考: https://mp.weixin.qq.com/s?__bizMzI3MDM5NjgwNg&mid…

zabbix6.4监控交换机发现ICMP报错Ping item must have target or host interface specified

报错信息&#xff1a; 查看监控项&#xff1a; 修改键值&#xff1a; 保存再次检查&#xff0c;发现又报错/usr/sbin/fping: [2] No such file or directory 原因是&#xff0c;zabbix-server上没有安装fping工具 解决方法&#xff1a;yum install fping -y 之后数据采集正常…

Retrofit的转换器

一、前言 1.为什么要使用Retrofit转换器 在我们接受到服务器的响应后&#xff0c;目前无论是OkHttp还是Retrofit都只能接收到String字符串类型的数据&#xff0c;在实际开发中&#xff0c;我们经常需要对字符串进行解析将其转变为一个JavaBean对象&#xff0c;比如服务器响应…

12、pytest上下文友好的输出

官方实例 # content of test_assert2.py import pytestdef test_set_comparison():set1 set("1308")set2 set("8035")assert set1 set2def test_dict_comparison():dict_1 {name:陈畅,sex:男}dict_2 {name:赵宁,sex:女}assert dict_1 dict_2def tes…

神经网络常用归一化和正则化方法解析(一)

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

代理IP和网络加速器的区别有哪些

随着互联网的普及&#xff0c;越来越多的人开始使用网络加速器来提高网络速度。然而&#xff0c;很多人并不清楚代理IP和网络加速器之间的区别。本文将详细介绍两者的概念及区别。 一、代理IP 代理IP是一种通过代理服务器进行网络连接的方式。在使用流冠代理IP时&#xff0c;用…

伴随高性能多级网关和多级分布式缓存架构应用实战经验

随着互联网业务的快速发展&#xff0c;对于高性能网络架构的需求越来越迫切。在这篇文章中&#xff0c;我们将介绍高性能多级网关和多级分布式缓存架构在实际应用中的经验&#xff0c;并提供相关示例代码。 一、高性能多级网关的设计与实现 高性能多级网关是一个重要的网络架构…

软件外包公司的核心竞争力

软件外包公司的核心竞争力可以涵盖多个方面&#xff0c;这取决于公司的战略、专业领域和市场定位。以下是一些可能构成软件外包公司核心竞争力的因素&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…

js中hasOwnProperty() 方法详解

hasOwnProperty 会返回一个布尔值,判断对象中是否存在该属性,不是继承属性,和原型链上的属性,是对象自身的属性,有返回true,没有返回false hasOwnProperty() 方法是 Object 的原型方法&#xff08;也称实例方法&#xff09;&#xff0c;它定义在 Object.prototype 对象之上&am…

动能资讯 | 智慧汽车—城市NOA迎爆发

在特斯拉引领的 TransformerBev 架构驱动下&#xff0c;智驾算法趋近于端到端的智驾大模型&#xff0c;使得智能驾驶开始步入城市 NOA 新时代。 消费者认知增强&#xff0c;未来市场空间广阔。伴随城市 NOA 在 23-24 年的落地和普及、L3 法规在年内的落地&#xff0c;行业 0-1…

众里寻她千百度:使用Excalidraw一句话绘制进销存系统采购入库流程

引言&#xff1a; 本文将介绍如何使用Excalidraw这一在线绘图工具来绘制进销存系统中的采购入库流程&#xff0c;帮助您更好地理解和优化采购流程。 正文&#xff1a; 1. 打开Excalidraw网站&#xff1a; 在浏览器中输入"https://excalidraw.com"&#xff0c;打开Ex…

聚观早报 |真我GT5 Pro细节曝光;iQOO Neo9系列参数曝光

【聚观365】12月5日消息 真我GT5 Pro细节曝光 iQOO Neo9系列参数曝光 抖音商城双12好物节 蔚来正式获得独立造车资质 三星Galaxy S24 Ultra手写笔获认证 真我GT5 Pro细节曝光 今年的顶级旗舰大比拼也进入最后的高潮&#xff0c;剩余还未亮相的骁龙8 Gen3旗舰新机目前也基…

个体诊所电子处方系统哪个好用,推荐一款可以自由设置配方模板能够填写病历可以查询历史病历的门诊处方笺软件

一、前言 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。 2、中医西医均可用此软件开电子处方&#xff0c;支持病历记录查询&#xff0c;药品进出库管理&#xff0c;支持配方模板一键导入电子处方。 二、电子…

Java 基础学习(五)面向对象编程-对象和类

1 类和对象 1.1 面向对象概述 1.1.1面向对象简史 面向对象编程思想最初的起源可以追溯到1960年的Simula语言&#xff0c;这被认为是第一个支持面向对象编程概念的语言。Simula引入了类、对象、继承等概念&#xff0c;将数据和操作进行封装。Simula的创始人奥利-约翰达尔&…

【数电笔记】09-逻辑代数的基本定律、常用公式

目录 说明&#xff1a; 逻辑代数的基本定律 1. 常量间的运算 2. 逻辑变量与常量的运算 3. 与普通代数相似的定律 4. 摩根定律&#xff08;反演律&#xff09; 5. 等式证明方法例题 逻辑代数的常用公式 1. 吸收律 2. 冗余律 3. 示例应用 4. 关于异或运算的一些公式 …

uniapp得app云打包问题

获取appid&#xff0c;具体可以查看详情 也可以配置图标&#xff0c;获取直接生成即可 发行 打包配置 自有证书测试使用时候不需要使用 编译打包 最后找到安装包apk安装到手机 打包前&#xff0c;图片命名使用要非中文&#xff0c;否则无法打包成功会报错

聊聊 Jetpack Compose 原理 -- Compose 是如何将数据转换成 UI 的?

Compose 是一个声明式的 UI 框架&#xff0c;提供了很多开箱即用的组件&#xff0c;比如 Text()、Button、Image() 等等&#xff0c;Compose 会经过几个不同的阶段&#xff0c;最终渲染出 UI 界面。 此转换过程分为【三个阶段】&#xff1a; 组合&#xff1a; 显示什么布局&a…

Dynamics 365 关闭新特性“试用新外观“

微软总是喜欢悄默默上线一些新功能&#xff0c;比如之前的高级设置直接跳转Power apps的管理后台&#xff0c;被骂了一周改回来了。 这次又搞了个试用新外观&#xff0c;但一般这种都是有关闭的地方的&#xff0c;去Power Platform中的环境设置中找了半天没找到。 最终在应用的…

缓冲区溢出及原理

缓冲区缓冲区溢出缓冲区溢出的 C 程序实例缓冲区溢出错误的危害Linux IA32 的进程映像缓冲区溢出的原理 缓冲区 缓冲区是一块用于存取数据的 内存&#xff0c;其位置和长度&#xff08;大小&#xff09;在编译时确定 或 在程序运行时动态分配。 缓冲区通常用于存储临时数据&am…

智能优化算法应用:基于吉萨金字塔建造算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于吉萨金字塔建造算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于吉萨金字塔建造算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.吉萨金字塔建造算法4.实验参数设…