【玩转 Postman 接口测试与开发2_002】第一章 API 相关术语及类型概述 + 1.1 何谓 API + 1.2 API 的调用类型

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

book cover for the 2nd version

《API Testing and Development with Postman》最新第二版封面

第一章 API 相关术语及类型

学习新知识有点像从船舷上跌落的感觉:什么都在动,而您只能勉强把头露出水面。好不容易才开始觉得自己弄明白了一些东西的原理,结果冷不丁冒出一个新知识点来,整个世界又开始摇摇欲坠……待到有了坚实的依靠,您才终于有机会环顾四周,弄清自己的方向。在探索新知识的过程中,整个世界这才变得阳光正好,微风不燥。

本章内容将为您打下坚实的基础。与几乎所有专业一样,API 测试与开发也有一套专属术语。使用 API 时,很多术语都是有专门的含义。本书会用到其中一部分术语,并希望我们在这些术语的含义上能够达成共识。

我会尽量使用标准定义。可即便如此,一些术语本就没有普遍公认的定义,对于这些术语,我会在本书中分享我的一些浅见。还望切记:当您在网上浏览文章或收听节目,甚至只是与内部组员交流时,别人对这些术语的理解和用法可能和我略有不同。

本书不是一部字典,所以我不打算只列出一堆术语及其定义。那样会很无趣,而且也没有什么指导意义。相反,我会花一些工夫介绍 API 的基本概念以及测试相关的理论知识,其中一些重要的术语将贯穿全书始终。

本章将涵盖以下主要内容:

  • 何谓 API?
  • API 的调用类型
  • Postman 的安装
  • API 请求的结构
  • API 测试相关注意事项
  • 不同种类的 API

学完本章,您将能够使用 Postman 创建 API 请求,并熟练掌握基本的 API 术语。同时还将有机会完成一个小练习,助您巩固所学,以便在日常工作中学以致用。


1.1 何谓 API? What is an API?

在美国国家航空航天局(即 NASA)1969 年出版的一份名为《计算机程序摘要》(Computer Program Abstracts)的出版物中,有一则关于 IBM 出售的实时显示控制程序的广告摘要是这么说的:只要 310 美元!外加 36 美元附赠精美文档。广告上还说,它是专为操作员级应用程序(operator-application)设计的编程接口,换句话说,它就是一个 API。

应用程序编程接口(API) 的历史可以与计算机代码的发展史一样悠久。从概念上讲,它只是两种不同的代码(或者是人类与某些代码)之间彼此交互的一种方式。我们说一个类(class)拥有一套 API,是说它具备了某些公共方法,其他代码可以调用;而一个脚本(script)拥有一套 API,则表示它能接受特定类型的输入(input);甚至是一个计算机上的驱动程序也能拥有一套 API,只要规定其他程序按照特定的某种方式进行调用即可。

然而,随着互联网的发展,API 一词的关注范围也在逐渐缩小。现在,当人们谈论 API 时,几乎都是在谈论 Web API —— 本书也将在这样的语境中展开相关介绍。Web API 将两个事物间的接口的概念,推广应用到互联网所构建的“客户端/服务器”关系中。在一个典型的 Web API 模型中,客户端在接口的这一边发送请求;而服务端(一台或多台服务器)则在接口的另一边响应该请求。

随着时间的推移,互联网不断发展演化,Web API 也随之不断演进。许多早期的 Web API 都是为企业量身定制的,对于接口双方如何交互有着严格的规定。一种名为 简单对象访问协议(Simple Object Access Protocol,即 SOAP) 的 API 应运而生。然而,就在本世纪初,互联网开始转为以消费者为基础,一些电子商务网站(如 eBay 和亚马逊)开始发布更加公开与灵活的 API。随后,Twitter、Facebook 等许多知名社交媒体网站也纷纷发布各自的 API,其中大部分都是基于一种名为 表现层状态转换(Representational State Transfer,即 REST) 的模式构建而成的。

这种方法比 SOAP 更为灵活,可以直接在互联网的基础协议上进行构建。

但互联网仍在不断变化,随着移动端应用与网站的普及,API 的重要性也日渐凸显。一些公司面临着在移动设备上传输大量数据的挑战,为此 Facebook 专门创建了一种名为 GraphQL 的 API。这种类型的 API 定义了一种查询语言(query language),有助于减少传输的数据量,同时也为 API 引入了一种稍显严格的结构。这些不同类型的 API 在某些情况下都能很好地发挥作用,本章将在最后一节进行介绍。不过,在详细介绍每种类型的 API 之前,首先要了解支撑所有 Web API 调用的一些基本概念。

1.2 API 的调用类型 Types of API calls

一些 API 调用可以更改服务端上的内容,而另一些则只返回数据,不对内容做任何修改。API 调用可能会以不同的方式影响数据,这些不同的方式可以通过术语 安全(safe)幂等(idempotent) 来进行描述。这些术语听起来让人有些望而生畏,为了更好地理解它们,不妨来看一个通俗易懂的例子:乐高积木。

试想有这么一张桌子,上面放着几块乐高积木,而我就坐在桌子旁边。我代表一个 API,桌子则代表服务端,乐高积木则代表一些目标对象(objects)。与乐高积木的所有互动都必须通过我来促成。在下面的示意图中,乐高积木代表服务端上的对象,我代表 API(应用程序接口),而您则代表客户端:

图 1.1:通过 API 连接服务端和客户端示意图

图 1.1:通过 API 连接服务端和客户端示意图

在上述假想关系中,您代表客户端,言下之意您可以让我用乐高来完成某些事。比如让我告诉您最上面的乐高积木有多大;我回答说,它的大小是 1。这就是 安全的(safe) API 请求与响应的示例。安全请求 是指不会更改服务端上 任何内容 的请求。您只问我请求了服务端中正在发生的事物的信息,因此并没有改变服务端本身的任何内容。

不过,其他类型的 API 调用就不好说了。试想:您给了我一块大小为 2 的积木,让我用那块积木把顶端的积木替换掉。我照做了,这样就改变了服务端的状态。如下图所示,积木堆现在由一块大小为 3 的积木和两块大小为 2 的积木组成:

图 1.2:新服务端状态示意图

图 1.2:新服务端状态示意图

由于服务端有变动,因此该请求不是一个安全的请求。但是,如果您再给我一块大小为 2 的积木,并再次要求我替换掉最上面的积木,这时服务端就不会有任何变化。那堆积木仍然是由一块大小为 3 的积木和两块大小为 2 的积木组成。这就是 幂等(idempotent) 调用的示例。无论调用多少次都返回相同结果的 API 调用,我们就说它是 幂等的(idempotent)

接着再想象另一种调用方式:您给我一块积木,让我把它加到积木堆的顶端。我又照做了,此时积木堆便由四块积木组成。这次显然不是安全调用,因为服务端已经改变了,但它是幂等的吗?

答案是否定的,但请花点时间思考一下,确保您真正理解了该调用不是幂等调用的原因。

如果很难理解,那么不妨想想如果重复同样的请求会发生什么:再给我一块积木,让我把它加到积木顶端。第二次这样做,积木还是我第一次添加后的样子吗?当然不是!此时共有五块积木,并且每让我加一次,积木堆会变动一次。幂等调用仅在第一次执行时改变事物的状态,后续调用都不会做任何改变。而刚才的调用每次都会改变一些东西,因此它不是幂等调用。

安全性(Safety)和幂等性(idempotency)是需要重点掌握的核心概念,尤其是在做 API 测试的时候。如果测试的是安全调用,则可以并行地运行测试,不必担心它们会相互干扰;但如果测试的是不安全的、或非幂等的调用,那么在运行测试的类型和时间上可能需要更加谨慎一些。

除了安全和幂等,我们还需要学习一些更重要的术语,并对 API 请求的结构做进一步深入了解。不过要是手里有看得见摸得着的东西,操作起来就会轻松得多。所以下一节,我们将稍作停顿,先完成 Postman 的安装并发送我们的第一个请求。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安冬的码畜日常

您的鼓励是我持续优质内容的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值