Web API的概念 HTTP协议基础

2019-02-18  本文已影响0人  自如_

刚接触接口测试的同学会很困惑,不是叫接口测试吗怎么又叫Web API呢,很多人对Web接口测试这一方面概念非常的模糊好多名词搞混淆了,我们第一件事就是要搞清楚一些名词的概念,省的交流的时候产生很多困惑。

很多同学听过下面这些术语,比如:

纷乱的术语


什么是接口测试

要理解什么是接口测试,首先我们需要理解什么是“接口”,接口的英文是“interface”,接口是某个对象和外界交互的部分,拿应用程序来说,它可能有很多接口。比如一个软件产品,可能有如下几种和外界交互的部分:

综上可知:上面的所有和外界交互的部分都是接口,对上述接口的测试都可以称之为接口测试。其泛义上理解的话,所有的测试都可以称之为接口测试,UI测试是UI接口;消息测试是测试消息接口;编程库的开发包测试是测试编程接口。实际上我们很多人经常挂在嘴边的说的“接口测试”,或者“API”测试,其实是第二种里面Web服务器提供访问的接口,简称Web服务接口。
-从接口测试说起

Web服务接口

API测试的特点


HTTP协议简介

虽然REST和SOAP Web Service 并没有一定说接口消息用HTTP协议传输,但实际上,几乎所有号称RESTful的系统和SOPA Web Service 都是基于HTTP的,所以,要进行Web接口测试首先大家了解HTTP协议。

是什么?有什么用

Http全称Hypertext Transfer Protocol超文本传输协议。最初发明它是用来在浏览器和web服务器之间传输超文本信息的,泛义上属于应用层的协议。由于现在传输层和网际层基本都是TCP、IP协议,所以其示意图可以如下:


image.png

由于HTTP协议清晰明了,应用范围非常广泛,很多其他应用(比如移动应用)都会使用它作为底层的传输协议。HTTP有很多版本:0.9,1.0,1.1,2。目前使用最广泛的是HTTP/1.1版本。新学习web的人经常混淆的两个名词就是HTTP和HTML,都是H开头的,但是两个概念完全不同。HTML是一种用来定义网页的文本语言,会HTML就可以编写网页;HTTP是在网络上传输信息(当然也包括HTML)的协议,通常用于浏览器和服务器通信。
举个例子,我们到京东买手机,手机需要包装到快递纸盒中,然后一路送到我们手里。手机实际的内容相当于HTML。包装且运输的方法相当于HTTP。web浏览器和web服务器之间是通过HTTP协议进行交互的,而浏览器和服务器之间的交互,都是通过N次和HTTP事务(transaction)进行的。一次HTTP事务包括浏览器发出的http请求(request)和服务器回应的http响应(response)组成。

HTTP请求格式

http通长是一种事务型协议,所谓事务型的协议就是有请求有响应,就是一个请求对应一个响应,请求是由客户端发起HTTP请求给服务端的,服务端返回一个HTTP响应,通常这个称之为一次HTTP的事务。

首先我们来看请求消息


image.png

首先第一行内容,术语成为请求行,请求行里面主要包含什么信息呢?表示这次要做操作什么资源,比如GET请求是用来获取信息的,表示从/images目录下请求logo.gif这个文件,协议版本是HTTP/1.1
比如我们看一个具体的百度上面,注意浏览器去访问一个服务的时候按F12就可以打一个开发者工具栏的一个东西,然后点击Network,就会把我们访问网站所搜发的信息都可以存储下来,比如我们点击百度,界面如下

image.png image.png

其中红色框子中的每一行对应一次http的transaction,包括请求和响应。我们点击其中第一条记录,看看其中的内容,注意,我们要点击右边窗口的headers标签,看到的内容如下:

image.png

大家注意web浏览器和服务器之间是通过HTTP协议进行交互的。而浏览器和服务器之间的交互,都是通过N次HTTP事务(transaction)进行的,一次HTTP事务包括浏览器发出的http请求(request)和服务器回应的http响应(response)组成。比如我们上图中General部分显示的就是这次HTTP事务的大概信息:浏览器发出http请求,请求的URL是https://www.baidu.com/,表示浏览器告诉服务器,我们想获取这个url对应的网络资源的信息,而服务器,执行web服务器代码发现这个url对应的是个html的网页内容,于是就将其内容在http响应中返回给浏览器。200 OK表示响应成功。我们可以在Request标签中看到html的内容。如果我们想查看具体的http请求和响应的信息,可以点击Request Headers和Response Headers边上的“view source”看到的内容如下

image.png image.png

请求行有请求的urlRequest URL: https://www.baidu.com/,有请求的方法Request Method: GET这些都是在请求行里面的

下面这部分就是请求头

image.png
这两行是一个http请求,是一个获取信息的请求GET

一个POST请求消息例子如下(注意请求头和消息体之间的空行)

image.png
他的请求是POST,POST请求通常是传递消息的,他不是要获取消息而是要提交信息给服务端,通常http请求除了请求行里面的第一行的信息还有请求头,就是下面的这些信息
image.png

请求头也包含了请求所带的一些信息比如我这个请求要访问的目标网站的地址foo.com,请求头里面还可以包含很多其他类型的请求头比如Content-Type:请求头是提供请求一些额外的信息,比如请求消息体有多少个字节这些

-消息体
请求行和请求头是必须有的,空行和消息体可能有也可能没有。假如请求有消息体的话,请求头和消息体之间会有一个空行,没有消息体就不用了。

请求行

请求行在第一行,包含:

请求头字段

http的请求头用来表示请求的其他信息。比如Host表示请求发往的目标机器主机名或者IP地址。还有Content-Length表示请求消息体的长度。http还有很多其他的请求头字段,我们后面会相应的讲解他们的含义。像这种Content-Length、Content-Type都是http协议标准里面提供的一些请求头,更多的协议标准协议头https://tools.ietf.org/html/rfc4229
除了这些标准的请求头之外我们还可以自定义头,有兴趣的可以自己了解下

请求消息体

很多时候,http请求是需要请求消息体的,尤其是POST、PUT等请求,请求消息体中保存了要提交给后台的数据信息。比如我们要上传一个文件。使用POST方法的HTTP请求发送文件数据。这些文件内容数据就在请求的消息体中。消息体存放资源信息的。
通常GET请求是没有消息体的,因为它是用来获取数据的,获取数据他请求本身不需要带数据。所以他没有消息体。除了POST请求其他请求也可以带PUT、DELETE、也可以带消息体,比如PUT修改一些信息,修改的信息修改新的信息是什么呢?比如修改用户名那新的用户名是什么呢,通常也可以放在消息体里面。
再比如说用POST上传一个文件,那可能HTTP消息体里面这个消息体是什么?就是你上传文件的内容了,消息体里面是存放资源信息的。。
请求的消息体有的时候有各种格式,大家记住Content-Type字段,后面的笔记我们会详细讲解,Content-Type就定义了请求消息体里面的数据的格式,我们常见的格式
比如大家看到的www-form-urlencoded格式

image.png

还有大家熟悉的XMLJson

HTTP响应

HTTP的响应消息包含如下内容

image.png

这个例子包含里面包含状态行和几个响应头,一个空行和相应的消息体(消息体是一个html文档)

状态行:
状态行在第一行,包含协议版本状态码和描述状态的短语,比如

HTTP/1.1  200  OK

表示客户端的请求成功响应;
状态码的第一个数字代表当前响应的类型:

响应头字段
http的响应头用来表示响应的其他信息,比如Date表示响应消息发送的日期时间,还有Dcontent-Length表示请求消息体的长度,Content-Type响应消息的格式,我们例子里面是html,响应的消息体就是html格式,http还有很多其他的响应头字段,我们后面会相应的讲解他们的含义

响应消息体
很多时间http响应是需要消息体的,比如请求一个网页的内容,那么我们网页的html内容就在响应的消息体中给出。再比如,一个REST API请求一个产品的价格信息,那么价格信息通常也是在HTTP响应消息的消息体中给出。

上一篇 下一篇

猜你喜欢

热点阅读