当前位置:首页>python>Python学习【113】:Python调用Restful API接口详解

Python学习【113】:Python调用Restful API接口详解

  • 2026-10-10 15:28:11
Python学习【113】:Python调用Restful API接口详解

Python学习

一、学前花絮

在实际工作中,我们编写的程序代码只是一个大的项目的一部分,而构成这个项目的各个部分之间需要API接口,这种情况属于项目内部接口。而对于一个用户单位来说,项目之间也不是孤立的,也就是说项目与其他应用之间,也会有API接口,这种情况属于项目外部接口。

而无论项目内部、项目外部的API接口到底指什么呢?

简单来说,API 就是软件之间的 “通信语言”,而我们常说的API 接口,是对这一通信规范的具体实现,也是开发中实际调用、开发的对象。

API 接口的分类维度有很多,按通信协议 / 架构风格是开发中最常用的分类方式,包含传统协议接口和现代 HTTP/HTTPS 基础接口两大阵营。传统协议接口包括TCP/UDP 接口,而现代HTTP/HTTPS基础接口主要包括普通HTTP接口和Restful接口。

本文针对普通HTTP接口和Restful接口进行比较并以python程序调用进行示例。

二、普通HTTP接口和Restful接口的区别及Python调用示例

2.1 普通HTTP接口和Restful接口介绍

HTTP 接口是基于 HTTP 协议实现的通用接口,是传输层面的基础实现;RESTful 接口是遵循 REST 架构风格的 HTTP 接口,是对 HTTP 接口的规范化、标准化设计,属于 HTTP 接口的 “优秀实践版本”。二者并非对立关系,RESTful 接口本质上是满足特定约束的 HTTP 接口,而普通 HTTP 接口则无架构风格的强制要求。

简单说,Restful接口包含在HTTP接口范围内,是它的子集。从另一个角度,RESTful 接口是遵循 REST 风格的 HTTP 接口,通过严格遵循 REST 的 6 大核心约束,实现接口的标准化、可扩展、松耦合。

2.2 二者的相同点

l底层协议一致:均基于 HTTP/HTTPS 协议实现,使用 HTTP 的基础组件(请求方法、URL、请求头、响应头、状态码、请求 / 响应体)进行通信;

l无状态特性:默认遵循 HTTP 的无状态原则,服务端不保存客户端的请求状态,每次请求都需携带完整的身份认证、参数等信息(可通过 Cookie、Token 实现状态保持,属于上层扩展);

l跨平台 / 跨语言:与开发语言、客户端 / 服务端架构无关,只要能解析 HTTP 协议,即可实现交互(如 Python、Java、前端 JS、Go 均可调用);

l支持多种数据格式:均可传输 JSON、XML、Form-Data、纯文本等数据格式,目前主流为 JSON;

l核心交互逻辑一致:均为 “客户端发起请求→服务端接收并处理→服务端返回响应” 的请求 - 响应模型。

2.3 二者的核心差异

普通 HTTP 接口无强制设计约束,而 RESTful 接口有严格的架构约束和设计规范,差异体现在请求方法、接口路径、状态码、资源操作、可扩展性等多个维度,以下是详细对比表:

补充:RESTful 的 6 大核心约束(普通 HTTP 接口无此要求),这是 RESTful 接口的 “硬性标准”,也是其与普通 HTTP 接口的本质区别:

  1. 客户端 - 服务端分离:客户端和服务端各司其职,服务端专注数据存储,客户端专注界面展示,降低耦合;
  2. 无状态:服务端不保存客户端状态,每次请求必须包含所有必要信息;
  3. 缓存:支持 HTTP 缓存(如 Cache-Control、ETag),减少重复请求,提升性能;
  4. 统一接口:这是最核心的约束,通过资源标识、资源表述、自描述消息、超媒体作为应用状态引擎(HATEOAS) 实现接口标准化;
  5. 分层系统:服务端可分层设计(如负载均衡、网关、业务层、数据层),客户端无需感知底层架构;
  6. 按需代码(可选):服务端可按需向客户端发送代码(如 JS),扩展客户端功能。

2.4 关键概念的补充说明

1.幂等性(RESTful 的核心设计点)

l幂等性:指多次执行相同的请求,得到的结果与执行一次完全一致,不会产生额外副作用;

lRESTful 的幂等性规则:

lGET:查询资源,多次查询结果一致,幂等;

lPUT:更新整个资源,多次更新最终结果一致,幂等;

lDELETE:删除资源,多次删除结果一致(删除后再删仍返回成功 / 404),幂等;

lPOST:创建资源,多次提交会创建多个资源,非幂等;

lPATCH:更新资源的部分字段,按需设计(一般建议实现幂等)。

普通 HTTP 接口通常忽略幂等性,比如一个/addUser的 POST 接口,多次提交会创建多个用户,引发业务问题。

2. 资源为核心(RESTful 的设计思维)

RESTful 的核心是把一切交互对象都视为 “资源”(如用户、订单、商品),资源有唯一的 URL 标识,所有操作都是对资源的 “增删改查”,而普通 HTTP 接口的核心是“动作”(如添加、删除、修改、查询),接口路径直接包含动作,这是二者设计思维的本质区别。

2.5 Python 调用示例

假设我们要实现一个“获取用户信息”的功能。

注意:为了演示,我假设了两个不存在的服务器地址。代码逻辑是通用的,你需要安装 requests 库:pip install requests。

1. 调用传统 HTTP 接口

场景:接口文档规定,要获取用户,必须调用 get 这个接口,并传入 userId 参数。

以上代码,细心的朋友会发现,为了美化输出,我们用了pprint。因为response的响应文件是json格式,记录了很多的信息,如果只是用一般的print,很长的一行超出屏幕。Pprint自动按照json的key-value进行美化输出。输出结果:

2. 调用 RESTful API

场景:接口文档规定,用户资源的路径是 /users。要获取特定用户,直接在路径后加 ID,并使用 POST 方法。

以上代码中,对应response的json数据再一部细化处理,只返回我们需要的部分数据,这种处理方法更精细化。输出结果:

2.6 以上内容的总结

相同点:底层传输协议都是 HTTP/HTTPS,Python 调用它们的代码几乎看不出区别(都是用 requests.get() 或 requests.post())。

不同点:接口的设计规范。

传统接口:像打电话给客服说“帮我查一下 123 的订单”,动作和对象混在一起。

RESTful 接口:像去快递柜取件,柜子(服务器)知道 /users/123 这个格子代表用户 123,你用 GET 动作就是取件,用 DELETE 动作就是清空。

建议:在现代开发中,如果后端提供了 RESTful 风格的接口,尽量遵循它的规范(用对 HTTP 方法),这样代码的可读性和维护性会更好。

三、小结

通过了解API接口的含义并针对普通HTTP接口与Restful接口进行比较,结合python程序调用二种接口的示例,我们更深入了解到这两种接口的异同。接口本质上就是对程序代码的解耦合,为什么要解耦合?

是因为现代工程项目分工的需要,一个工程项目不太可能是一个人开发,要和很多人、很多的应用模块或者其他项目进行数据交互,比如最常见的前后端分离。如果不解耦的话,你的程序代码与其他人的程序代码密切相关,改动起来会影响别人,最终影响整个项目的开发进度。

让我们保持学习热情,多做练习。我们下期再见!

最新文章

随机文章