1. 接口等同与API吗?
绝不等同!是“包含与被包含”的关系。
公式:API ⊂ 接口 (API 是接口的真子集)
1、接口
是一个宏观的、 umbrella term(总称)。它是一个哲学和工程学概念。
【定义】
在计算中,接口 是两个或多个独立组件之间进行交互、共享信息的共享边界。这种交互可以发生在软件、硬件、软件与硬件之间,甚至人与程序之间。
【核心】
它定义了一套规则、协议和工具,以确保交互的顺利进行,同时隐藏内部实现细节(这就是所谓的“封装”)。
【分类】
硬件接口:如USB、HDMI,定义了物理连接和电子信号的标准。
软件接口:如图形用户界面(GUI),命令行界面(CLI),以及应用程序编程接口(API)。
用户界面:人与系统交互的接口,如屏幕、键盘。
2、API
是接口这个总称下的一个具体子集和实现方式。
【定义】
API 是 Application Programming Interface 的缩写,中文为“应用程序编程接口”。它是一种特定类型的软件接口,其交互主体严格定义为软件组件或应用程序。
【核心】
它是一组预先定义好的函数、协议和数据结构,旨在被其他软件代码调用,以使用特定功能或数据,而无需访问其源代码或理解内部工作机制。
【关键特性】
面向程序员:供开发者编程使用,而非最终用户操作。
标准化通信:通常通过结构化请求和响应(常用HTTP协议和JSON/XML格式)进行交互。
功能与数据提供:核心价值在于提供可复用的服务(如支付、地图、登录、数据查询)。
2.接口测试会涉及到的接口
Restful 接口:
postman 把数据按照json序列化,通过http协议传输数据, 到 nginx的 80端口
RPC接口:
rpc client 把数据按照二进制序列化,通过tcp协议传输数据,到rpc server 8123端口
Windows接口:
win32程序 把数据进行二进制序列化,通过windows事件总线,到windows进程
【调用是否跨越物理机器】
-
本地调用 (Local Call)
-
场景:同一进程内,模块间调用。
-
技术:函数/方法调用。(这不是系统API)
-
-
进程间调用 (IPC - Inter-Process Communication)
-
场景:同一台机器上,不同程序/进程间调用。
-
技术:
-
系统API调用:你的进程调用操作系统内核的服务。(这是系统API的主要场景)
-
其他IPC机制:如管道、消息队列、共享内存等。
-
-
-
远程调用 (Remote Call)
-
场景:不同机器上的程序间调用。
-
技术:
-
RPC:如 gRPC, Thrift。目标是让远程调用像本地调用一样。
-
Web API:如 RESTful API。基于HTTP协议,以资源为中心。
-
消息中间件:如 Kafka, RabbitMQ。异步通信,解耦更强。
-
-
【大概白话翻译】
当需要跨机器与外部程序通信时,我通常会选择 RESTful API(通用性强)或 RPC(性能高)。
当我的程序需要请求操作系统(这个最基础的“外部程序”)提供服务时,我调用 系统API。
当我在编写程序内部的代码时,各个模块之间直接通过函数调用来协作,并通过设计良好的函数签名(模块接口) 来约定契约。
【假装看起来专业的解释】
应用层、传输层、数据链路层

传输层 (Transport Layer) - 第4层(这一层负责端到端的通信,决定了数据如何被传输。)

数据链路层 (Data Link Layer) - 第2层(这一层负责在同一局域网内通过MAC地址传输数据帧。)
对于系统API而言,这一层概念完全不适用。

3.我们拿HTTP接口来看
【用到的库】
request
【支持说明】
完美支持Restful API
RPC API可以调用但有条件。它主要用于调用那些基于 HTTP 协议并使用 JSON/XML 等文本格式序列化的 RPC 框架(如 JSON-RPC、XML-RPC,甚至 gRPC-Gateway),而无法直接调用使用纯二进制协议(如原生的 gRPC over HTTP/2、Thrift 等)的 RPC 服务。
【安装】
pip install requests
pip show requests
【发送HTTP请求】
import requests
requests.get('http://www.baidu.com/')
requests.request('get', 'http://www.baidu.com/')
sess = requests.session()
sess.get('http://www.baidu.com/')
sess.request('get', 'http://www.baidu.com/')
import requests
# 请求方法 + 接口地址
resp =requests.request(
# 行
'get',
"https://www.xxx.com/upload",
params={
"dir": "user_home"
},
#### 头
headers={
"name": "头name"
},
#### 正文
data={ # 表单数据
"name": "表单数据name"
},
####json={
#### "age": [1, 1, 2, ]
####},
files={ # 表单上传
"file": open("conftest.py", "rb") # 二进制的模式打开
}
)
#获取响应结果
# 行
print(resp.status_code, resp.reason)
# 头
print(resp.headers)
# 正文
print(resp.text) # 文本,适合人类可以阅读的内容
print(resp.content) # 二进制,适合进行内容下载
print(resp.json()) # 把文本按照json进行反序列化,得到字典
注意:data和json不能共存,和files可以共存

被折叠的 条评论
为什么被折叠?



