欢迎关注公众号 学习资料不会少
什么是接口
关于什么是接口、什么是API,如果读者去网上査询,可以找到的解释有很多,而且绝大多数都是很标准的官方解释,例如:
API( Application Programming Interface)即应用程序接口。你可以认为API是一个软件组件、或是一个Web服务与外界进行交互的接口。这里的接口可以和API画等号。
作为初学者,或者对接口了解很少的读者,这个解释其实并不好理解。那如何才能给读者解释清楚接口呢?如何由表及里地让读者理解接口的运转机制呢?下面笔者结合多年的接口测试经验,用逐层叠加的方式来解释。
1.从功能层面来说
从功能层面来说,可以将接口简单理解为一个黑盒子。其上游负责输入参数,下游负责输出参数,类似于平时的黑盒测试对象,如图2-1-1所示。
▲图2-1-1接口理解1
这里以一个例子来说明:
(1) 在 Chrome浏览器中输入:
https://www.v2ex.com/api/nodes/show.json.json?name=Python,按“ Enter'”键之后能看到如图2-1-2所示的数据。
(2) 下面来分析这个过程。
在输入URL地址并按 Enter键后,页面实际发送了一次接口请求。具体的请求是:接口地址
(https.//www.v2ex.com/api/nodes/show.json?)+请求参数及其值(nane= python)。后面这个"name= python”就是输入数据;返回的数据就是浏览器展示的一个JSON格式数据。至于这个数据是怎么来的,目前还是看不到的。所以这就像黑盒子一样,输入不同的数据会得到不同的返回结果。这里读者也可以试试其他的参效,看看返回的数据容是什么样子的,比如:
https: //www.v2ex.com/api/nodes/show.json?name=java
https: //www.v2ex.com/api/nodes/show.ison?name=测试
▲图2-1-2 接口返回数据
//名词解释
///
NOCITCE
● JSON (JavaScript Object Notation) : 是一种轻量级的数据交换格式,独立于语言和平台。JSON解释器和JSON库支持不同的编程语言,是以得}括起来的键值对数据。
JSON数据格式如下:
{“name”:“Michael”,“age”:24}
在这个例子中,键是字符串形式,值可以取任意类型。name是键名,Michael 是键对应的值。JSON 是可以嵌套的,比如{"name": "Michael", "birthday”:{"month": 8, "day": 26} } 。
● JSON格式的在线检查工具:
https: //www.beJSON.com/
https: //www.beJSON.com/JSONviewernew/
通过上面的在线检查工具,能检查JSON格式的正确性。
2. 从数据流层面来说
从数据流层面来说,可以将接口理解为连接前端(Web 页面、APP等)和数据库(Database) 等后端的纽带,用于在二者之间传递数据、处理数据,如图2-1-3所示。
▲图2-1-3 接口理解2
在现在主流的框架结构中,后端一般都使用数据库来存储数据,而前端不能直接去数据库中操作数据,一方面不安全,另一方面效率低。要完成数据的交互,必然要有中间的纽带,那就是接口。所以,从这个层面来说,接口主要负责前端页面和后端数据库之间的数据传输和处理。
当下大部分的互联网产品都采用前/后端分离的方式,即前端的表示层负责展示数据及其样式,后端的数据层负责数据处理和存储,如图2-1-4所示,它们之间的业务逻辑层负责处理业务逻辑,其中最重要的就是接口。所以说,接口的健壮性、稳定性、抗压性直接决定了这个互联网产品的成败。前端页面通过调用接口传递约定的参数;接口收到请求后,会按照业务逻辑在后端进行处理,并将处理结果和需要的数据返回给前端;前端解析数据并展示在页面。这就完成了广义上的一次前/后端交互。
▲图 2-1-4 三层结构
// 名词解释
///
NOCITCE
● 前端(前台):可以直观看到和使用的内容都可被归为前端。比如Web页面上一些可见的、可操作的界面。
● 后端:不能被用户可见的内容。其实,后端是一个编程上的概念,具体是指业务逻辑和数据的处理。
● 后台:通俗意义上是指管理系统,主要用来增加、删除、修改、查询数据,实际上是内部人士使用的一个Web系统。
3. 从编程层面来说
从编程层面来说,可以将接口理解为业务逻辑处理方法的外在表现形式,如图2-1-5所示。它可以是一个类下面的方法,也可以是一个函数。
▲图2-1-5 接口理解3
从数据流层面来理解,接口会按照“业务逻辑”处理数据。那么业务逻辑在哪里呢?很显然,是在程序代码的函数或方法中。函数或方法按照逻辑返回不同的数据,这便是接口在不同参数下的不同返回信息。所以,从“白盒操作”角度来看,接口测试是直接对函数或方法的代码层进行测试。
以上从三个层面解释了什么是接口。读者没必要把接口想得过于复杂,认为接口和接口测试多么高深。实际上,接口和日常的页面测试没有本质的区别,只是在外在表现形式和测试方法上略微有差别。读者从以上三个层面可以窥探出接口测试的一般思路,后面还会逐步讲解,请耐心往后看公众号的其他文章。
接口的分类
根据系统调用方式可以将接口分为以下两类。
1. 系统之间的接口
系统之间的接口如图2-2-1 所示。我们用得最多的是第三方接口,比如要做一个系统来展示每天的天气,那天气数据是怎么得到的呢?不可能自己去预测天气,有免费的第三方接口可使用,只需按照接口协议调用想要的天气数据。当然,这是调用系统外部的数据。在系统内部也存在这种调用关系,道理类似。
▲图2-2-1 接口分类 1
2. 服务之间的接口
目前主流的系统架构如图2-2-2所示,即应用层、服务层和数据层。
▲图2-2-2 接口分类2● 应用层:负责展示数据和发起数据请求。比如,12306 购票网站上显示的敷新购买操作等。
● 服务层:为应用层提供数据处理。
● 数据层:用来存储数据,有关系型数据库等。
各层之间的调用过程是怎样的呢?例如,在 12306 网站上买票,首先用户需要选择票,然后通过单击“确定”按钮下单。用户下单就是调用了应用层的接口,假设叫“购买接口”, 购买接口会去数据层的数据库中进行查询、新增购买记录等操作。成功完成后,会返回一个成功标志和其他信息。最后,应用层接收到这个接口返回的数据,将买票结果展现给用户。
在这个过程中,各层之间的交互就是通过接口。应用层和服务层之间是通过 HTTP接口,服务层和数据层主要通过DAO (Data Access Object) 访问数据。用Python 操作 MySQL 数据库时,使用的PyMySQL 就是起这个作用的。
往期精彩文章
喜报来了!凡猫学员薪资最高16K!
金融行业软件测试介绍
2020年为什么大家都开始学习自动化测试?
学习测试开发前 你需要掌握的python 代码水平
1万+软件测试人员都在学的精品课程免费送,大家别错过