簡(jiǎn)書已停更赔桌,歡迎轉(zhuǎn)到個(gè)人博客查看對(duì)應(yīng)教程:https://www.cnblogs.com/superhin/p/10338915.html
課程目錄
Python接口測(cè)試實(shí)戰(zhàn)1(上)- 接口測(cè)試?yán)碚?/a>
Python接口測(cè)試實(shí)戰(zhàn)1(下)- 接口測(cè)試工具的使用
Python接口測(cè)試實(shí)戰(zhàn)2 - 使用Python發(fā)送請(qǐng)求
Python接口測(cè)試實(shí)戰(zhàn)3(上)- Python操作數(shù)據(jù)庫(kù)
Python接口測(cè)試實(shí)戰(zhàn)3(下)- unittest測(cè)試框架
Python接口測(cè)試實(shí)戰(zhàn)4(上) - 接口測(cè)試框架實(shí)戰(zhàn)
Python接口測(cè)試實(shí)戰(zhàn)4(下) - 框架完善:用例基類筒捺,用例標(biāo)簽贴硫,重新運(yùn)行上次失敗用例
Python接口測(cè)試實(shí)戰(zhàn)5(上) - Git及Jenkins持續(xù)集成
Python接口測(cè)試實(shí)戰(zhàn)5(下) - RESTful简逮、Web Service及Mock Server
更多學(xué)習(xí)資料請(qǐng)加添加作者微信:superz-han獲取
本節(jié)內(nèi)容
- 接口及接口測(cè)試
- 網(wǎng)絡(luò)基礎(chǔ)知識(shí):IP,域名, DNS及端口
- 網(wǎng)絡(luò)基礎(chǔ)知識(shí):OSI七層模型及TCP協(xié)議
- HTTP協(xié)議
接口及接口測(cè)試
這里插播一個(gè)段子
上圖中骨杂,程序員口中提到的接口是什么意思呢迅脐?
手機(jī)殼有沒有顏色這個(gè)屬性(功能)娃肿? --- 有
手機(jī)殼有沒有提供讓程序獲取它顏色的途徑? --- 沒有黍衙,這個(gè)途徑就是接口
接口的概念
接口又稱API(Application Programming Interface,應(yīng)用程序編程接口)泥畅,是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力们豌,而又無需訪問源碼涯捻,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)浅妆。
簡(jiǎn)單概括為以下3點(diǎn):
- 程序代碼(函數(shù)方法)
- 屏蔽實(shí)現(xiàn)細(xì)節(jié)
- 可以被訪問/調(diào)用來獲取信息或?qū)崿F(xiàn)某些功能(提供訪問地址望迎,定義了訪問規(guī)則)
接口自述(通俗的來說):
- 首先我有一些功能(功能函數(shù))
- 你不用關(guān)心我怎么實(shí)現(xiàn)的(屏蔽細(xì)節(jié))
- 我會(huì)給你一個(gè)我的地址(接口地址)
- 你按照地址找到我,按照我規(guī)定的格式(請(qǐng)求類型)告訴我所需要的信息(參數(shù))就行
- 我會(huì)給你個(gè)反饋(相應(yīng)信息)
舉個(gè)栗子:
西虹市公考報(bào)名處 --- 接口名稱
報(bào)名地址: 西虹市街口區(qū)帶莫路3號(hào) --- 接口地址
現(xiàn)場(chǎng)需填寫資料: 姓名凌外,身份證證號(hào)碼辩尊,專業(yè),報(bào)考崗位等等 --- 接口參數(shù)
驗(yàn)證規(guī)則: --- 參數(shù)驗(yàn)證規(guī)則
- 身份證需與本人一致
- 專業(yè)需與報(bào)考崗位符合
- 報(bào)名時(shí)間 2024.8.22-2024.8.30
現(xiàn)場(chǎng)會(huì)給出是否報(bào)名成功 --- 接口響應(yīng)信息
軟件中的接口
軟件項(xiàng)目中康辑,接口是系統(tǒng)與系統(tǒng)之間摄欲,模塊與模塊之間或者服務(wù)于服務(wù)之間相互調(diào)用的入口。
從開發(fā)者角度疮薇,接口是分工協(xié)作的產(chǎn)物胸墙,不同開發(fā)者實(shí)現(xiàn)自己的功能之后,封裝成接口按咒,供其他開發(fā)者調(diào)用迟隅。其他開發(fā)者只要按規(guī)定格式發(fā)送一些必要參數(shù),就能使用該功能
常見接口類型?
HTTP接口智袭,RPC接口奔缠,Web Service接口, Dubble接口吼野,RESTful接口校哎,其中RESTful接口是基于HTTP接口的,Web Service及Dubble屬于RPC接口
- HTTP接口:通過HTTP協(xié)議傳輸?shù)慕涌谕剑梢詡鬏斘谋颈韱螖?shù)據(jù)闷哆,也可以傳輸Json類型的對(duì)象數(shù)據(jù)或xml類型的數(shù)據(jù)
- RPC: 遠(yuǎn)程方法調(diào)用,隨著分布式系統(tǒng)的出現(xiàn),當(dāng)你需要調(diào)用部署到其他服務(wù)器上的方法時(shí),需要用到RPC忍饰。RPC只是提出了這樣一個(gè)問題前普,有很多種解決方案,比如WebService(基于SOAP協(xié)議)抛蚁, REST(基于HTTP協(xié)議)。
- SOAP: 簡(jiǎn)單面向?qū)ο髤f(xié)議,基于HTTP绕沈,使用xml作為默認(rèn)傳輸格式
- Web Service: 基于SOAP協(xié)議的一種RPC實(shí)現(xiàn)方案。相比傳統(tǒng)的HTTP接口只傳輸文本請(qǐng)求和文本相應(yīng)帮寻,通過Web Service可以直接拿到遠(yuǎn)程的一個(gè)對(duì)象乍狐,并能夠直接調(diào)用該對(duì)象的屬性和方法,比HTTP更高級(jí)固逗。
-
REST/RESTful API: REST浅蚪,表述性狀態(tài)轉(zhuǎn)移。一種HTTP接口的設(shè)計(jì)風(fēng)格烫罩,將一切接口視為資源惜傲,要求接口路徑同意管理,分版本管理贝攒,規(guī)定了GET/POST等請(qǐng)求以及HTTP狀態(tài)碼的使用規(guī)范盗誊,默認(rèn)使用JSON格式傳輸。RESTful API即滿足REST風(fēng)格即設(shè)計(jì)規(guī)范的API接口
相互關(guān)系
什么是接口測(cè)試隘弊?
接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試哈踱。接口測(cè)試主要用于檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)
子系統(tǒng)之間的交互點(diǎn)。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換梨熙、傳遞和控制管理過程开镣,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。
為什么要做接口測(cè)試咽扇?
- 接口測(cè)試介于單元測(cè)試與系統(tǒng)測(cè)試之間邪财,單元測(cè)試一般由開發(fā)完成(不要相信開發(fā))
- 接口是各種系統(tǒng)功能的基礎(chǔ)舅列,一旦接口出現(xiàn)問題可能會(huì)引起許多系統(tǒng)功能的問題并且不容易定位
- 開展接口測(cè)試可以及早發(fā)現(xiàn)問題,有效降低測(cè)試成本
- 接口一般較UI相對(duì)穩(wěn)定卧蜓,利于進(jìn)行自動(dòng)化和持續(xù)集成
接口測(cè)試都測(cè)什么帐要?
接口測(cè)試一般有以下崗位實(shí)施:
- 手工測(cè)試崗:先提測(cè)接口再提出功能,兼做接口自動(dòng)化
- 服務(wù)端測(cè)試崗:梳理代碼弥奸,審核接口實(shí)現(xiàn)邏輯是否與業(yè)務(wù)設(shè)計(jì)一致榨惠,技術(shù)實(shí)現(xiàn)邏輯的合理性,異常流測(cè)試盛霎,接口壓測(cè)及安全性測(cè)試
- 測(cè)試開發(fā)崗:專職做接口(或UI)的自動(dòng)化用例開發(fā)赠橙,測(cè)試工具開發(fā)
接口測(cè)試點(diǎn)參考:
怎樣掌握接口測(cè)試?
- 了解OSI網(wǎng)絡(luò)模型愤炸,TCP/UDP協(xié)議期揪,掌握HTTP/HTTPS協(xié)議,了解RPC, Web Service及REST规个,理解Session和Cookie
- 掌握常用的接口測(cè)試工具如curl命令,Postman,Jmeter,LR,SoupUI,AB等
- 掌握基本的抓包工具如Chrome開發(fā)者工具,Fiddler,Charles,Wireshark,tcpdumps等
- 掌握一門編程語(yǔ)言Python或Java
- 了解Nginx, Apache, Tomcat等服務(wù)器中間件
- 掌握數(shù)據(jù)庫(kù)基本查詢命令凤薛,及一些NoSQL(如Redis)操作,用于檢查響應(yīng)結(jié)果
- 掌握基本的Linux日子查詢和篩選命令
接口測(cè)試重難點(diǎn)
- 動(dòng)態(tài)變量參數(shù)化
- 接口依賴及中間變量問題
- 異步接口結(jié)果驗(yàn)證問題
- 相應(yīng)參數(shù)及嵌套很多的驗(yàn)證問題
- 接口測(cè)試框架的穩(wěn)定性問題
- 資源清理問題
- 多接口場(chǎng)景測(cè)試
...
網(wǎng)絡(luò)基礎(chǔ)知識(shí):IP,域名, DNS及端口
IP地址
就像每個(gè)人都有一個(gè)身份證號(hào)碼
IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式诞仓,它為互聯(lián)網(wǎng)上的每一個(gè)網(wǎng)絡(luò)和每一臺(tái)主機(jī)分配一個(gè)邏輯地址
查看IP命令
- Windows: ipconfig
- Linux: ifconfig
Python練習(xí):檢查字符串是否ip
def is_ip(ip):
num_list = ip.split(".")
if len(num_list) != 4:
return False
for num in num_list:
if num.lstrip('0')!=num or not num.isdigit() or not 0 <= int(num) <=255:
return False
return True
print(is_ip("101.1.0.201"))
使用map函數(shù)實(shí)現(xiàn)方法(參考)
def check_ipv4(ip_str):
ip = ip_str.strip().split(".")
return len(ip)==4 and all(map(lambda x: x.lstrip('0')==x and x.isdigit() and 0<=int(x)<= 255, ip))
端口
"端口"是英文port的意譯缤苫,可以認(rèn)為是設(shè)備與外界通訊交流的出口。
如果把IP地址比作一間房子墅拭,端口就是出入這間房子的門活玲。一個(gè)IP地址的端口可以有65536(即:2^16)個(gè)
端口類型
- 公認(rèn)端口:從0到1023,緊密綁定于一些服務(wù)
- 注冊(cè)端口:人1024到49151谍婉,許多服務(wù)綁定這些端口舒憾,這些端口同樣用于許多其它目的。
- 動(dòng)態(tài)或私有端口:從49152到65535穗熬。理論上镀迂,不應(yīng)為服務(wù)分配這此端口。實(shí)際上死陆,機(jī)器通常從1024起分配動(dòng)態(tài)端口招拙。
常見軟件默認(rèn)端口 - Apache/Nginx(HTTP服務(wù)): 80
- Tomcat: 8080
- Oracle: 1521
- MySQL: 3306
- SQL Server: 1433
- PostgreSQL: 5432
- MongoDB: 27017
- Redis: 6379
- Memcached: 11211
查看端口命令
- Windows: netstat -ano
- Linux: netstat -ntlp
解決端口占用問題
- Windows: netstat -ano | findstr "8080",找到占用端口的程序的PID -> 打開任務(wù)管理器 -> 設(shè)置顯示PID -> 找到并結(jié)束對(duì)于程序
- Linux: netstat -ntlp | grep "8080", 找到對(duì)應(yīng)的程序 -> ps -ef | grep "程序名" 找到對(duì)于的pid -> kill 相應(yīng)的id
域名及DNS
由于IP地址不容易記憶,為IP地址賦予了一個(gè)利于記憶的別名措译,稱為域名
如,百度的ip為: 61.135.169.125饰序,對(duì)應(yīng)的域名為 www.baidu.com
如何查看域名所對(duì)于的ip领虹?
- Windows/Linux: ping www.baidu.com
DNS
DNS即域名解析系統(tǒng),域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù)求豫,提供域名轉(zhuǎn)到對(duì)應(yīng)ip的服務(wù)
網(wǎng)絡(luò)基礎(chǔ)知識(shí):OSI七層模型及TCP協(xié)議
OSI七層模型
OSI即開放系統(tǒng)互連參考模型塌衰,一種網(wǎng)絡(luò)架構(gòu)诉稍,分為7層。
- 上三層---應(yīng)用層最疆,控制軟件方面
- 應(yīng)用層:文件傳輸杯巨,電子郵件,文件服務(wù)努酸,虛擬終端 TFTP服爷,HTTP,SNMP获诈,F(xiàn)TP仍源,SMTP,DNS舔涎,Telnet
- 表示層:數(shù)據(jù)格式化笼踩,代碼轉(zhuǎn)換,數(shù)據(jù)加密
- 會(huì)話層:解除或建立與別的接點(diǎn)的聯(lián)系(會(huì)話)
- 下四層---數(shù)據(jù)流層亡嫌,用來管理硬件
- 傳輸層:提供端對(duì)端的接口 TCP嚎于,UDP
- 網(wǎng)絡(luò)層:為數(shù)據(jù)包選擇路由 IP,ICMP挟冠,RIP匾旭,OSPF,BGP圃郊,IGMP
- 數(shù)據(jù)鏈路層 傳輸有地址的幀以及錯(cuò)誤檢測(cè)功能 SLIP价涝,CSLIP,PPP持舆,ARP色瘩,RARP,MTU
- 物理層 以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) ISO2110逸寓,IEEE802居兆,IEEE802.2
OSI七層模型及各層協(xié)議
TCP及UDP協(xié)議
TCP和UDP都是傳輸層的協(xié)議
- TCP:傳輸控制協(xié)議
- UDP: 數(shù)據(jù)報(bào)文協(xié)議
TCP和UDP的區(qū)別
- UDP的特點(diǎn)如下:
- 無鏈接
- UDP使用盡最大努力交付,不保證可靠性
- UDP是面向報(bào)文的竹伸,UDP對(duì)應(yīng)用層交付下來的報(bào)文泥栖,既不合并,也不拆分勋篓,而是保留這些報(bào)文的邊界吧享。應(yīng)用層交給UDP多長(zhǎng)的報(bào)文,UDP就照樣發(fā)送譬嚣,即一次發(fā)送一個(gè)報(bào)文
- UDP沒有擁塞控制
- UDP支持一對(duì)一钢颂、一對(duì)多、多對(duì)一和多對(duì)多的交互通信
- UDP的首部開銷小拜银,只有8字節(jié)
- TCP的特點(diǎn):
- TCP是面向連接的
- 每條TCP連接只能用于兩個(gè)斷點(diǎn)殊鞭,一對(duì)一
- TCP提供可靠交付的服務(wù):連接傳輸數(shù)據(jù)遭垛、無差錯(cuò)、不丟失操灿、不重復(fù)锯仪、并且按序到達(dá)
- TCP提供全雙工通信
- 面向字節(jié)流。TCP根據(jù)對(duì)方給出的窗口和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個(gè)報(bào)文應(yīng)該包含多少個(gè)字節(jié)
HTTP協(xié)議
HTTP:超文本傳輸協(xié)議趾盐,是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議庶喜。
HTTP協(xié)議是一種無狀態(tài)協(xié)議,主要包含請(qǐng)求和相應(yīng)兩大部分:
請(qǐng)求(Request)
請(qǐng)求是我們發(fā)送給接口的數(shù)據(jù)對(duì)象谤碳,包含接口地址(URL)溃卡,請(qǐng)求方法,參數(shù)蜒简,請(qǐng)求頭(Headers), Cookies, 數(shù)據(jù)等
真實(shí)抓包一個(gè)請(qǐng)求:
請(qǐng)求原始格式-GET(Raw格式:Fiddler抓包得到)
GET https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC HTTP/1.1
Host: www.sojson.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: __cfduid=dccd65c484a7657b468327b66023fefc41534934250; yjs_id=59d1c42afa817b578b4b562d1f72651f; ctrl_time=1
- 第1行: 請(qǐng)求方法 接口地址 HTTP協(xié)議版本
- 第2-N行:請(qǐng)求headers(如果有Cookie瘸羡,最后一行為Cookie)
- 空一行
- 請(qǐng)求數(shù)據(jù)(POST等方法使用,此處為空)
請(qǐng)求原始格式-POST請(qǐng)求(Raw格式:Fiddler抓包得到)
POST http://openapi.tuling123.com/openapi/api/v2 HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1a39439e-61c8-4e59-82a1-736a362c5962
User-Agent: PostmanRuntime/7.2.0
Accept: */*
Host: openapi.tuling123.com
accept-encoding: gzip, deflate
content-length: 468
Connection: keep-alive
{
"reqType":0,
"perception": {
"inputText": {
"text": "附近的酒店"
},
"inputImage": {
"url": "imageUrl"
},
"selfInfo": {
"location": {
"city": "北京",
"province": "北京",
"street": "信息路"
}
}
},
"userInfo": {
"apiKey": "ec961279f453459b9248f0aeb6600bbe",
"userId": "206379"
}
}
URL
URL:統(tǒng)一資源定位符搓茬,接口的訪問地址(包含服務(wù)器地址+接口地址)
URL組成格式
協(xié)議\\: 服務(wù)器地址:端口號(hào)\資源路徑?參數(shù)1=值1&參數(shù)2=值2
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京
注意:?號(hào)要使用英文?,不能使用中文犹赖?
URL編碼
URL編碼是一種瀏覽器用來打包請(qǐng)求參數(shù)及表單參數(shù)的格式, 參數(shù)和參數(shù)之間使用&分割,非ASCII碼使用%加16進(jìn)制編碼替換
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京
編碼后為:https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC
鏈接:URL編碼/解碼工具(http://tool.chinaz.com/Tools/urlencode.aspx)
請(qǐng)求方法
序號(hào) | 方法 | 描述 |
---|---|---|
1 | GET | 請(qǐng)求指定的頁(yè)面信息卷仑,并返回實(shí)體主體 |
2 | POST | 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)數(shù)據(jù)被包含在請(qǐng)求體中 |
3 | HEAD | 類似于get請(qǐng)求峻村,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭 |
4 | PUT | 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容 |
5 | DELETE | 請(qǐng)求服務(wù)器刪除指定的頁(yè)面 |
6 | CONNECT | 預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器 |
7 | OPTIONS | 允許客戶端查看服務(wù)器的性能 |
8 | TRACE | 回顯服務(wù)器收到的請(qǐng)求锡凝,主要用于測(cè)試或診斷 |
GET請(qǐng)求和POST請(qǐng)求的區(qū)別
-
GET請(qǐng)求:
- GET請(qǐng)求可被緩存
- GET請(qǐng)求保留在瀏覽器歷史記錄中
- GET請(qǐng)求可被收藏為書簽
- GET請(qǐng)求不應(yīng)在處理敏感數(shù)據(jù)時(shí)使用
- GET請(qǐng)求有長(zhǎng)度限制
- GET請(qǐng)求只應(yīng)當(dāng)用于取回?cái)?shù)據(jù)
-
POST請(qǐng)求:
- POST請(qǐng)求不會(huì)被緩存
- POST請(qǐng)求不會(huì)保留在瀏覽器歷史記錄中
- POST不能被收藏為書簽
- POST請(qǐng)求對(duì)數(shù)據(jù)長(zhǎng)度沒有要求
請(qǐng)求參數(shù)(URL參數(shù))
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京
- 中的
city=北京
,向接口傳遞一個(gè)參數(shù)“city”,參數(shù)值為“北京” - 不同的參數(shù)之間用&隔開粘昨,非ASCII碼參數(shù)會(huì)自動(dòng)url encode
請(qǐng)求Headers(請(qǐng)求頭)
常見Headers
請(qǐng)求數(shù)據(jù)(又稱為Request Body 或 Data)
請(qǐng)求數(shù)據(jù)類型(Content-Type)(重點(diǎn))
- application/x-www-form-urlencoded: 網(wǎng)頁(yè)表單格式(默認(rèn))
- application/json:REST接口常用格式
- text/xml:xml格式,RPC接口窜锯,Dubbo接口常用格式
- test/html: html格式
- multipart/form-data: 混合表單张肾,支持上傳圖片
數(shù)據(jù)編碼
- ASCII碼: 單字節(jié),美國(guó)信息交換標(biāo)準(zhǔn)碼, 包含數(shù)字锚扎,字母吞瞪,英文標(biāo)點(diǎn)及一些控制字符
- ISO-8859-1:又稱Latin1,單字節(jié)驾孔,向下兼容ASCII芍秆,用于支持部分于歐洲使用的語(yǔ)言
- ANSI編碼:?jiǎn)巫止?jié)表示英文,雙字節(jié)表示漢字翠勉,對(duì)ASCII的擴(kuò)展妖啥,不同的國(guó)家和地區(qū)制定了不同的標(biāo)準(zhǔn),中文中的GBK,GB2312屬于ANSI編碼
- Unicode編碼: 采用二個(gè)字節(jié)編碼(英文和中文的字符都以雙字節(jié)存放)眉菱,與ANSI碼不兼容
- UTF-8:是目前互聯(lián)網(wǎng)上使用最廣泛的一種Unicode 編碼方式迹栓,又稱萬國(guó)碼
指定請(qǐng)求數(shù)據(jù)編碼(解決中文亂碼):
請(qǐng)求Headers設(shè)置Content-Type: application/json; charset=utf-8
- Base64: 一種用64個(gè)字符來表示任意二進(jìn)制數(shù)據(jù)的方法。
- Base64編碼的作用:由于某些系統(tǒng)中只能使用ASCII字符俭缓。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法克伊。
- 而且base64特別適合在http,mime協(xié)議下快速傳輸數(shù)據(jù)华坦。
參考:Base64編碼及其作用
響應(yīng)(Response)
接口返回的信息愿吹,包含HTTP狀態(tài)碼,響應(yīng)頭和相應(yīng)信息
原始相應(yīng)數(shù)據(jù)(Raw格式惜姐,F(xiàn)iddler抓包)
HTTP/1.1 200 OK
Date: Thu, 23 Aug 2018 06:32:26 GMT
Transfer-Encoding: chunked
Connection: keep-alive
22b
{"intent":{"actionName":"","code":10005,"intentName":"","parameters":{"lon":"","checkout_date":"2018-08-25","star":"0","city":"北京","days":"1","order":"","price_range":"","nearby_place":"酒店","brand":"","checkin_date":"2018-08-24","place":"信息路","lat":"","needgeo":"0"}},"results":[{"groupType":1,"resultType":"url","values":{"url":"http://m.elong.com/hotel/0101/nlist/#indate=2018-08-24&outdate=2018-08-25&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF"}},{"groupType":1,"resultType":"text","values":{"text":"親犁跪,已幫你找到相關(guān)酒店信息"}}]}
0
常見的響應(yīng)格式有:
- html
- json
- xml
響應(yīng)編碼:有時(shí)需要根據(jù)不同的編碼來正確解析響應(yīng)內(nèi)容
HTTP狀態(tài)碼
- 1** 信息,服務(wù)器收到請(qǐng)求歹袁,需要請(qǐng)求者繼續(xù)執(zhí)行操作
- 2** 成功坷衍,操作被成功接收并處理
- 3** 重定向,需要進(jìn)一步的操作以完成請(qǐng)求
- 4** 客戶端錯(cuò)誤条舔,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無法完成請(qǐng)求
- 5** 服務(wù)器錯(cuò)誤枫耳,服務(wù)器在處理請(qǐng)求的過程中發(fā)生了錯(cuò)誤
常見HTTP響應(yīng)碼
- 200: 成功
- 301/302: 請(qǐng)求重定向到另外一個(gè)接口
- 400: 請(qǐng)求語(yǔ)法錯(cuò)誤
- 403:資源沒有訪問權(quán)限
- 404:資源不存在(有可能是請(qǐng)求url錯(cuò)誤或參數(shù)不正確)
- 405:請(qǐng)求方法不被允許(比如接口只允許Post,使用Get請(qǐng)求接口)
- 500:服務(wù)器內(nèi)部錯(cuò)誤(通常是服務(wù)器掛了或接口Bug)
- 502: 網(wǎng)關(guān)失效
- 504: 網(wǎng)關(guān)請(qǐng)求超時(shí)
HTTP與HTTPS
HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,HTTPS協(xié)議是由HTTP+SSL協(xié)議構(gòu)建的可進(jìn)行加密傳輸孟抗、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議迁杨,要比HTTP協(xié)議安全。
HTTPS和HTTP的區(qū)別
- HTTPS協(xié)議需要到ca申請(qǐng)證書凄硼,一般免費(fèi)證書較少铅协,因而需要一定費(fèi)用。
- HTTP是超文本傳輸協(xié)議摊沉,信息是明文傳輸狐史,HTTPS則是具有安全性的SSL加密傳輸協(xié)議。
- HTTP和HTTPS使用的是完全不同的連接方式说墨,用的端口也不一樣骏全,前者是80,后者是443婉刀。
- HTTP的連接很簡(jiǎn)單吟温,是無狀態(tài)的;HTTPS協(xié)議是由HTTP+SSL協(xié)議構(gòu)建的可進(jìn)行加密傳輸突颊、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議鲁豪,比HTTP協(xié)議安全。
Cookie和Session
- Cookie/Cookies: 是指某些網(wǎng)站為了辨別用戶身份律秃、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)爬橡。
-
Session:服務(wù)端為客戶端訪問所建立和維持的會(huì)話,通常會(huì)生成一個(gè)唯一的id棒动,會(huì)話有一定的有效期糙申。
由于HTTP是無狀態(tài)的,即服務(wù)器不知道用戶上一次做了什么船惨,默認(rèn)也無法識(shí)別用戶身份柜裸。
比較流行的做法是: - 用戶訪問時(shí)服務(wù)端建立會(huì)話(Session)
- 將會(huì)話id(Session ID)隨響應(yīng)返回缕陕,并保存在客戶端的Cookies里
-
后續(xù)的訪問中,服務(wù)器通過辨識(shí)疙挺,客戶端請(qǐng)求時(shí)攜帶的Cookies內(nèi)容來識(shí)別用戶
用戶首次訪問服務(wù)器向客戶端設(shè)置Cookie
后續(xù)訪問時(shí)攜帶Cookie
Cookie和Session的區(qū)別
- cookie是存在客戶端(瀏覽器)的進(jìn)程內(nèi)存中和客戶端所在的機(jī)器硬盤上
- cookie只能能夠存儲(chǔ)少量文本扛邑,大概4K大小
- cookie是不能在不同瀏覽器之間共享
- Session存在服務(wù)器端,存在網(wǎng)站進(jìn)程的內(nèi)存中
- Session在初次設(shè)置session的時(shí)候铐然,會(huì)在session池中實(shí)例化一個(gè)session對(duì)象蔬崩,以sessionid 的值作為key,同時(shí)會(huì)將key以cookie的形式保存到客戶端的內(nèi)存中
- Session的作用域只存在當(dāng)前瀏覽器的會(huì)話中搀暑,當(dāng)瀏覽器關(guān)閉以后就會(huì)將sessionid丟失沥阳,但是服務(wù)器的Session對(duì)象要20分鐘以后才會(huì)回收
授權(quán)與加密
常見的接口安全策略:
- Session/Cookie機(jī)制: 即需要登錄,登錄后可訪問各個(gè)接口自点,最常用的一種策略桐罕,適用于內(nèi)部接口。
- 固定appid模式: 用戶注冊(cè)時(shí)會(huì)生成一個(gè)唯一的appid樟氢,用戶調(diào)用接口時(shí)需要攜帶appid冈绊,適用于公開接口,安全性較差埠啃。
- 動(dòng)態(tài)token模式: token即身份令牌死宣,用戶訪問接口需要使用個(gè)人appid臨時(shí)申請(qǐng)一個(gè)token,token有一定有效期碴开,適用于公開接口毅该,安全性較appid模式好。
- 開放協(xié)議: Basic Auth/ Oauth1.0 / Oauth2.0: 適用于開放接口潦牛。
- 數(shù)字簽名: 將所有請(qǐng)求參數(shù)及參數(shù)值進(jìn)行排列拼接眶掌,加上用戶私鑰,再進(jìn)行Md5或其他加密生成一個(gè)請(qǐng)求的簽名(sign),請(qǐng)求是需要攜帶簽名巴碗,服務(wù)器收到請(qǐng)求后朴爬,會(huì)對(duì)請(qǐng)求重新計(jì)算簽名并核實(shí)與請(qǐng)求所攜帶簽名是否一致。安全性較高橡淆,可以有效防止請(qǐng)求被篡改召噩。適用于內(nèi)部接口及微服務(wù)接口。
常見的加密算法
在接口數(shù)據(jù)傳輸過程中常對(duì)一些敏感數(shù)據(jù)(如密碼)進(jìn)行Base64編碼或MD5加密逸爵,以增加安全性具滴。
加密算法分為對(duì)稱式加密算法和非對(duì)稱式加密算法,對(duì)稱式加解密使用同一個(gè)秘鑰师倔,非對(duì)稱式使用不同的秘鑰构韵。
- 對(duì)稱式加密
- DES: 數(shù)據(jù)加密標(biāo)準(zhǔn),速度較快,適用于加密大量數(shù)據(jù)的場(chǎng)合
- AES: 高級(jí)加密標(biāo)準(zhǔn)疲恢,速度快凶朗,安全級(jí)別高
- 非對(duì)稱式加密
- RSA: 是一個(gè)支持變長(zhǎng)密鑰的公共密鑰算法, 分公鑰和私鑰冈闭,SSH協(xié)議使用該算法
- MD5: 最常用的一種加密方法俱尼,是一種摘要算法抖单。
緩存
HTTP 緩存機(jī)制作是 web 性能優(yōu)化的重要手段萎攒,當(dāng)用戶第一次請(qǐng)求服務(wù)器資源時(shí),服務(wù)器將資源緩存到客戶端本地矛绘,在一定時(shí)間內(nèi)(緩存有效期內(nèi))當(dāng)用戶再次向服務(wù)器請(qǐng)求同樣的資源時(shí)耍休,可以直接從緩存中讀取,而不用從服務(wù)器下載货矮。
接口測(cè)試中緩存相關(guān)注意點(diǎn)
- 在更新或調(diào)試接口是羊精,注意是否需要清理緩存(或臨時(shí)禁用緩存)
- 緩存有一定的有效期
- 接口性能測(cè)試中會(huì)關(guān)注緩存的命中率