REST、WebService与FastAPI之间的关系及示例代码
创作时间:
作者:
@小白创作中心
REST、WebService与FastAPI之间的关系及示例代码
引用
CSDN
1.
https://blog.csdn.net/qq_33039859/article/details/143956520
REST、Web Service 和 FastAPI 是现代 Web 应用开发中的重要概念或工具,下面分别介绍它们的定义及它们之间的关系:
A. REST(Representational State Transfer)
定义:
REST 是一种架构风格,用于设计网络分布式系统,特别是基于 HTTP 的 Web 应用。它通过定义一组约束(例如无状态通信、客户端-服务器分离、统一接口等),来确保系统的可扩展性和易用性。
特点:
- 使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE)进行操作。
- 数据以 JSON、XML 等格式传输,JSON 是最常见的格式。
- 面向资源的设计,所有的功能通过资源的 URL 表示(如
/users、/orders)。
用途:
REST 是许多 Web 服务和 API 的核心架构设计方式。
B. Web Service
定义:
Web Service 是一种协议或技术集合,用于通过网络提供应用之间的互操作性。它允许不同技术栈的应用(如 Java 和 Python)在网络中相互通信。
种类:
Web Service 的实现方式有多种:
- 基于 SOAP(Simple Object Access Protocol):基于 XML 的协议,标准化程度高。
- 基于 REST:更轻量,广泛用于现代 Web 开发。
关系与区别:
- REST 并不是 Web Service 的一种技术,而是一种架构风格。
- Web Service 的一种流行实现是 RESTful Web Service,它遵循 REST 架构风格。
C. FastAPI
定义:
FastAPI 是一个现代化、快速(基于 Starlette 和 Pydantic)、易用的 Python Web 框架,主要用于构建 RESTful API。
特点:
- 高性能:使用异步框架(如 asyncio),性能与 Node.js 和 Go 类似。
- 强大的数据验证:基于 Pydantic 的数据模型,支持类型检查和自动校验。
- 开发效率高:
- 自动生成交互式 API 文档(基于 OpenAPI 和 Swagger)。
- 支持自动完成和类型检查(基于 Python 类型注解)。
- REST 支持:FastAPI 专门为实现 RESTful Web Service 设计,支持所有 HTTP 方法和资源管理。
典型用途:
- 构建高性能的 RESTful API。
- 提供微服务接口。
- 实现实时通信和数据处理。
D. 三者的关系
- REST 与 Web Service:
- REST 是一种设计架构。
- Web Service 是实现应用通信的技术集合,RESTful Web Service 是两者的交集。
- FastAPI 与 REST:
- FastAPI 是用于构建 RESTful API 的框架,全面支持 REST 的约束和 HTTP 标准。
- FastAPI 与 Web Service:
- FastAPI 是一种工具,可以实现 RESTful Web Service。
- 它简化了 Web Service 开发,并通过自动化文档、异步处理等提升开发效率。
E. 总结对比
特性 | REST | Web Service | FastAPI |
|---|---|---|---|
性质 | 架构风格 | 技术集合 | Python Web 框架 |
重点 | 资源管理与操作 | 系统间通信 | 高效构建 RESTful API |
应用场景 | 构建 API 设计规范 | 提供服务的技术实现 | 实现 RESTful Web Service |
开发工具支持 | 不限 | SOAP/RESTful API 工具 | FastAPI 框架及生态工具 |
通过 FastAPI,你可以轻松地实现基于 REST 的 Web Service,既符合 REST 架构规范,又能高效地构建和管理 API。
F. 案例分析
需求描述
Python代码构建REST服务,服务器A提供一个列数固定,行数变换的dataframe传递给该REST服务所在的服务器B,该服务器B会计算每一列的平均值,随后,返回给服务器A
测试代码
以下是一个实现此需求的Python代码示例,分别包含服务器A和服务器B的代码,使用FastAPI构建REST服务。
服务器A代码(发送DataFrame并接收结果)
import pandas as pd
import requests
def send_dataframe():
# 创建一个示例DataFrame
data = {
"Column1": [1, 2, 3],
"Column2": [4, 5, 6],
"Column3": [7, 8, 9]
}
df = pd.DataFrame(data)
# 将DataFrame转换为JSON
df_json = df.to_json(orient='split')
# 向服务器B发送请求
url = "http://<SERVER_B_IP>:8000/calculate-averages"
response = requests.post(url, json={"data": df_json})
if response.status_code == 200:
print("Received averages from server B:", response.json())
else:
print("Failed to get response from server B:", response.status_code)
if __name__ == "__main__":
send_dataframe()
服务器B代码(接收DataFrame并计算平均值)
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import pandas as pd
app = FastAPI()
class DataFrameRequest(BaseModel):
data: str # DataFrame in JSON format (orient='split')
@app.post("/calculate-averages")
async def calculate_averages(request: DataFrameRequest):
try:
# 解析收到的JSON为DataFrame
df = pd.read_json(request.data, orient='split')
# 计算每一列的平均值
averages = df.mean().to_dict()
# 返回平均值
return {"averages": averages}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
部署步骤
- 运行服务器B:
- 确保安装了FastAPI和Uvicorn:
pip install fastapi uvicorn pandas - 启动服务器B:
uvicorn server_b:app --host 0.0.0.0 --port 8000
- 运行服务器A:
- 确保安装了requests库:
pip install requests pandas - 替换
为服务器B的IP地址。 - 运行服务器A脚本。
测试结果
服务器A发送DataFrame至服务器B,服务器B计算各列的平均值后返回结果。服务器A会打印类似的返回值:
Received averages from server B: {'Column1': 2.0, 'Column2': 5.0, 'Column3': 8.0}
Swagger-UI: request-body
{
"data": "{\"columns\":[\"Column1\",\"Column2\",\"Column3\"],\"index\":[0,1,2],\"data\":[[1,4,7],[2,5,8],[3,6,9]]}"
}
热门推荐
微波炉内部结构图详解
团队来了新同事如何交流
ADC分辨率与最低有效位(LSB)详解
收藏!58个设计师最佳配色工具网站
爱择调研:几内亚铝土矿山运行顺利,进口矿供应稳增
核聚变将是未来的清洁能源,但“艰巨”的挑战阻碍了它的发展
微生物发酵技术在食品领域的应用研究
微信朋友圈画质被压缩怎么办?一文详解解决方案
解决显示器表面细小划痕的方法(保护视觉健康)
广州:科技创新实力彰显 丰硕成果竞相涌现
C语言如何限制整数范围
C语言中int溢出问题的解决方案
【社区矫正】司检同心协力 共同预防社矫再犯罪
文成公主入藏的意义与故事
看病"标准化":近九成公立医院推行临床路径管理
医疗核心制度落实情况分析与改进措施
JS中undefined问题的全面解析与解决方案
解析Undefined:探寻未知的意义
外汇在国家经济中的作用及其深远影响
PE手套一次性加厚手膜,PE一次性手套有毒吗
腹部肌肉拉伤怎么办?比较快并且有效果的方法
权力与财富的终结:探讨和珅被查抄家产的规模
药物分析:探索药物的安全、有效与经济性
如何计算太阳能电池板的电池和逆变器
三色搭配新思路,四种组合让你轻松搞定!
得了肺炎要马上吃抗生素?喝苏打水能治痛风?2024年11月科学领域流言榜→
探索教育之路:适合教师兼职的十大副业,你了解吗?
C语言如何显示错误信息:从基础函数到高级实践
揭秘Dolby、DTS、PCM、DSD,哪种格式声音效果最好?
为什么在交易中会出现开仓后迅速平仓的情况?这种情况会带来哪些潜在影响?