欢迎光临
我们一直在努力

API 和接口深度解析

一、基础定义

API(Application Programming Interface)应用程序编程接口

API 是抽象的「规范、约定、能力集合」。 它定义:你可以调用哪些能力、传什么参数、会返回什么结果。

API 偏向逻辑、能力层面,是一份契约,不一定走网络。

例子:

  • Python 内置函数 print(),这就是本地 API,程序内部调用,不走网络。
  • “获取用户信息” 这个能力,本身是一个 API。
  • 接口(Interface)

    接口是 API 的具体实现载体,是实实在在的通信出入口。 把 API 这套约定,用代码实现,对外暴露出来,这个可以访问的入口,叫接口。

    接口偏向物理 / 通信层面,是真实可调用的通路。


    通俗类比

    • API:菜单(约定有哪些菜品、点单规则,抽象的契约)
    • 接口:服务员(真正帮你传递请求、返回结果的实体通路)

    菜单 (API) 规定可以点什么菜;服务员 (接口) 完成实际交互。 一个 API 能力,可以提供多个接口实现;也可以一个接口实现一组 API 能力。

    二、分类维度(测试重点)

    1、本地 API(进程内 API,不走网络)

    程序内部模块之间调用,没有网络请求。

    • API:类提供的方法、函数定义
    • 接口:函数 / 方法入口 示例:Python 函数、Java 类方法。测试里单元测试测的就是这类 API。

    2、网络 API(我们做接口测试的对象,HTTP/RPC)

    跨进程、跨机器、跨系统,通过网络通信。

    工作中说的 “调 API”“测接口”,全部属于网络 API。

    表格

    概念说明
    网络 API 业务能力契约:登录、查询用户、新增订单这些能力定义
    HTTP 接口 基于 HTTP 协议实现出来的真实访问入口:POST /api/user/login

    POST /api/user/login 这个 url,就是接口;它提供的 “用户登录” 能力,是API。

    RPC 接口(微服务内部,Dubbo、gRPC)

    也是网络接口,但不走 HTTP 协议,自定义二进制协议,服务和服务之间内部调用。

    • API:服务定义的方法能力
    • 接口:RPC 暴露出来的服务方法入口

    我们手工测试大多测 HTTP 接口;后端微服务会大量 RPC 接口。

    三、核心区别总结(面试标准答案)

  • API 是能力与契约(抽象);接口是实现这个契约的调用入口(具体实体)
  • API 范围更大:API 包含本地函数 API、网络 API;接口多指网络通信入口。
  • 关系:接口是 API 的一种实现方式。API 不一定是接口,但网络接口一定对应某一套 API。
  • 口语现状:工作中几乎不严格区分,“调 API”“调接口” 表达同一个意思;但是面试要能说出概念差异。

    四、HTTP 网络接口完整内部执行全流程(深度原理,面试加分)

    以登录接口 POST /api/user/login 举例

  • 客户端(网页 /apk/python 脚本)按照 API 契约,组装 http 请求:url、method、headers、json 参数
  • 通过 TCP 网络,把数据包发送服务器
  • Nginx 反向代理,把请求转发给后端应用服务
  • 后端框架 (SpringBoot) 接收请求,路由匹配到对应的接口方法
  • 按照 API 约定校验入参(账号、密码是否符合规则)
  • 执行业务逻辑,访问数据库做账号校验
  • 业务处理完成,组装返回数据(业务 code、msg、token)
  • 封装 HTTP 响应报文返回客户端
  • 客户端解析 JSON,拿到业务结果
  • API 契约规定了入参出参格式;接口负责完成整个通信执行。

    两层状态码,再次重点区分(高频坑)

  • HTTP 状态码(网络传输层):200、400、401、404、500
  • 代表 HTTP 请求通不通,不代表业务成功。

  • 业务状态码 code(API 契约定义,业务层):0 成功 / 500 业务失败 / 401token 失效
  • 代表业务逻辑是否执行成功,写在响应 json 体内,由开发自定义。

    面试必考题:http 返回 200 是否代表接口调用成功? 答:不是。200 代表网络请求成功,要以响应体里面 API 约定的业务 code 判断业务是否成功。

    五、接口测试,我们到底在测什么?

    站在测试视角:

  • 验证API 契约是否被接口正确实现:入参校验、返回字段、业务逻辑是否符合接口文档(API 契约)。
  • 测接口的入参、边界、异常、权限;
  • 校验接口返回数据和数据库是否一致;
  • 校验接口的安全性、越权、重复请求。
  • 接口文档本质就是API 契约说明书,接口是被测对象。

    六、容易混淆名词辨析

  • API 文档 = 接口文档:工作中是同一个东西,描述 API 契约,写清楚接口 url、请求方式、参数、返回值。
  • 接口 ≠ URL:URL 只是 HTTP 接口的访问地址;RPC 接口没有 URL。
  • 接口和服务:一个后端服务,会对外暴露几十上百个接口,实现一组 API 能力。
  • 七、面试完整背诵参考答案

    问题:说说 API 和接口的区别?

    API是应用程序编程接口,是一套抽象的能力契约,定义了可以调用什么功能、入参出参规则。API分为本地API和网络API,本地API就是程序内部函数方法,不需要网络。

    接口是API的具体实现入口。如果是网络场景,接口就是跨系统通信的真实通路。
    API偏向能力定义,接口偏向实际调用实体。接口属于API的实现,但API不一定是接口,比如本地函数属于API,但不属于网络接口。

    我们日常做接口测试,测试的就是网络API对应的HTTP/RPC接口,验证接口实现是否符合API文档契约。

    八、延伸:RESTful API(测试经常听到)

    RESTful 是一套API 设计规范(是契约风格),不是新协议。

    • 用 HTTP method 表达动作:GET 查、POST 新增、PUT 修改、DELETE 删除
    • url 只描述资源,不描述动作:/api/user 而不是 /api/getUser

    RESTful API 是设计风格,最终实现出来就是一个个 HTTP 接口。

    赞(0)
    未经允许不得转载:171主机测评 » API 和接口深度解析
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址