社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
API(Application Programming Interface)用程序编程接口,简称API / 接口。
举例:Windows是一个封装好的系统,按理用户无权操作。但它提供了一整套接口,我们可以调用接口对Windows系统进行一系列的操作。类库就是提供的一整套接口,类下的每个函数都是一个接口。实现函数供他人使用,是提供接口;使用他人提供的函数,是调用接口。
接口的定义big big big,但此篇接口测试中的接口,特指基于网络协议的接口(客户端→服务端→客户端),而非编程语言对应库中的编程接口。
模拟HTTP客户端(PC端浏览器 / 手机端APP)向HTTP服务端(Web服务器)发送报文请求,服务器接收请求报文后对相应的报文做处理,并向客户端返回应答,然后客户端接收应答的一个过程。
1、HTTP协议(Hyper Text Transfer Protocol超文本传输协议)
一个属于应用层的面向对象的协议,基于TCP/IP通信协议来传递数据(HTML 文件、图片文件、查询结果等),用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器。明文传输,端口号:80。
HTTPS协议超文本传输安全协议。加密传输,端口号:443。
2、SOAP协议(Simple Object AccessProtocol简单对象访问协议)
它基于XML(标准通用标记语言下的一个子集),提供了HTTP所需的扩展。它是轻型协议,用于分散的、分布式计算环境中交换信息,有助于以独立于平台的方式访问对象、服务和服务器。
3、Dubbo协议
简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。
4、其他协议
是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。明文传输,端口号:80。
HTTPS协议超文本传输安全协议。加密传输,端口号:443。
客户端向服务器发送一个请求(Request),服务器返回一个响应(Response),就是一次交互过程。
数据包,网络上发送的一段数据。
它是网址的另一个名称。在WWW上,每个文件都有一个唯一的URL,
URL的组成:(三部分版本)资源类型、存放资源的主机域名、资源文件名 / (四部分版本)协议、主机、端口、路径。
URL的格式:http://ip或域名:端口/请求路径
(请求路径的 / 代表服务器的部署目录)
实例:https://blog.csdn.net/maoxuexue/article/details/105958996
1)浏览器自带的开发者工具(快捷键F12)
2)HttpWatch浏览器插件
只支持IE和firefox浏览器。
3)Fiddler抓包工具
一个使用本地 127.0.0.1:8888 的 HTTP 代理,任何能够设置 HTTP 代理为 127.0.0.1:8888 的浏览器和应用程序都可以使用 Fiddler。专门用于Http协议报文, 可以抓取电脑浏览器和手机APP的HTTP请求和响应。
https://blog.csdn.net/maoxuexue/article/details/105963509
1)Request报文的格式
GET http://127.0.0.1/test.html HTTP/1.1
格式:请求方法[空格]请求资源的路径(URL)[空格]HTTP协议版本号
位置:请求报文的第一行
(常用字段)
Host: 127.0.0.1
Connection: keep-alive #指定持续连接,或指定在响应完成后关闭连接。
Cache-Control: max-age=0 #指定缓存指令(请求时的缓存指令包括:no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 #客户端使用的 操作系统和浏览器 的名称和版本。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
If-None-Match: "ab-5a4fdc896be1b"
If-Modified-Since: Wed, 06 May 2020 17:06:22 GMT
格式:全部类似于键值对(头部字段名:值)
位置:请求行以下,空行以上
介绍:请求的附加信息
[空行]
位置:空行以下
介绍:请求携带的数据
注:get请求的body一般为空
2)Response报文的格式
HTTP/1.1 200 OK
格式:HTTP协议版本号 状态码 状态码说明
位置:响应报文的第一行
(常用字段)
Date: Wed, 06 May 2020 17:45:03 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/0.9.8zb PHP/5.3.29
Last-Modified: Wed, 06 May 2020 17:45:00 GMT
ETag: "ac-5a4fe52baa585"
Accept-Ranges: bytes
Content-Length: 172 #表示服务器返回的内容长度(即响应报文的body的长度):字节数。
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html #表示服务器返回的内容格式(即响应报文的body的格式):type/subtype(类型/子类型)。eg:image/png image/jpeg text/html text/plain
格式:全部类似于键值对(头部字段名:值)
位置:状态行以下,空行以上
介绍:响应的附加信息
[空行]
<!DOCTYPE html>
<html>
<head>
<title>这是页面标题</title>
<meta charset="utf-8">
</head>
<body>
<h1>这是一级标题1</h1>
</body>
</html>
介绍:服务器返回给客户端的文本信息
REST风格的接口设计建议:
查询数据使用GET
新增数据、提交表单使用POST
更新数据使用PUT
删除数据使用DELETE
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
1)全部状态码:https://www.runoob.com/http/http-status-codes.html
2)常见状态码:
200(OK):客户端请求成功
301(Moved Permanently):永久重定向
302(Found):临时重定向
304(Not Modified):文件从上次请求后内容没有更新,请使用缓存
解决办法:清浏览器缓存,重新发送请求。
如谷歌浏览器:ctrl+shift+delete
400(Bad Request):请求语法错误,无法被服务器理解
401(Unauthorized):请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403(Forbidden):服务器收到请求,但是拒绝提供服务
404(Not Found):请求路径错误
405(Method Not Allowed):请求方法错误
500(Internal Server Error):服务器发生不可预期的内部错误,无法处理请求
503(Server Unavailable):服务器因超载或系统维护,暂时不能处理请求,过段时间可能恢复正常
3)状态码分类:
1**(指示信息):服务器已收到请求,需请求者继续执行操作
2**(成功):请求已被成功接收并处理
3**(重定向):需进一步操作以完成请求
4**(客户端错误):请求包含语法错误或请求无法实现
5**(服务器错误):服务器在处理请求的过程中发生了错误
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!