整理python接口自动化相关——8、你要了解的接口与API

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进程

调用是否跨越物理机器

  1. 本地调用 (Local Call)
    • 场景:同一进程内,模块间调用。

    • 技术函数/方法调用(这不是系统API)

  2. 进程间调用 (IPC - Inter-Process Communication)
    • 场景:同一台机器上,不同程序/进程间调用。

    • 技术

      • 系统API调用:你的进程调用操作系统内核的服务。(这是系统API的主要场景)

      • 其他IPC机制:如管道、消息队列、共享内存等。

  3. 远程调用 (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可以共存

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值