rest的簡單理解:
在使用之前,先簡單的瞭解下rest:
大家都知道”古代”網頁都是前端後端融在一起的,比如之前的PHP,JSP等。在之前的桌面時代問題不大, 但是近年來移動互聯網的發展,各種類型的Client層出不窮,這就催促了rest的誕生。
REST 近年來已經成爲最主要的 Web 服務設計模式,它是一種軟件架構風格,但不是一套標準,它用來規範應用如何在http層與API提供方進行數據交互,其好處在於其爲面向資源的URL(即http請求路徑),rest規定中要求URL各層只能用名詞不能用動詞,這樣相比於傳統的get請求有利於傳輸數據的穩定性,數據的操作流程不會輕易被人看破,也便於團隊開發,各種url一目瞭然。
實例:
有了上面對rest的簡單理解,那我們再看一個應用的比較常見的例子。
像測試人臉識別算法的識別率,剛開始時自己無從下手,然後經過向大佬請教,直接讓開發暴露出了一個rest接口給了我,通過此rest接口返回的數據,分析評估其是否可用,接下來就簡單說一下我的做法:
首先,收集照片,case裏的滿足各種條件的照片,放置於不同的文件目錄下;
然後,與開發對過或者查看接口文檔中的傳參,弄清傳參格式。這裏講述的是一個簡單的只傳了base64格式的照片形式,遍歷文件夾下的圖片,然後將圖片形式寫成base64格式,代碼如下:
# coding=utf-8
import requests
import os
import cv2
import base64
def get_facename(self, file_path):
list_name = []
file_names = os.listdir(file_path)
for file_name in file_names:
if os.path.isfile(os.path.join(file_path, file_name)):
list_name.append(file_name)
return list_name
def get_img_base64(self, file_path):
list_base64 = []
for file_name in Aaf().get_facename(file_path):
img = cv2.imread(file_path + file_name)
img_str = cv2.imencode('.jpg', img)[1].tostring()
img_base64 = base64.b64encode(img_str)
# print img_base64
list_base64.append(img_base64)
return list_base64
然後,將圖片編碼之後的base64格式導入到接口中(即多次請求這個接口)。
def face_att(self, file_path, post_url):
for img in Aaf().get_img_base64(file_path):
payload = {"image":str(img),"AAA":"aaa","BBB":"bbb" }
headers = {
#響應頭,可寫可不寫
"Cache-control":"no-cache"
}
try:
response = requests.request("POST", url, data=payload, headers=headers)
print response.text
except Exception as error:
print error
if __name__ == '__main__':
path = '照片所在目錄'
url = "調接口的網址"
Aaf().face_att(path, url)
最後,輸出的信息例如如下:可以按照自己的需求來進行分析數據。
{
"code":0000,
"isattack":false,
"msg":"****",
"":"",
"":""
.....
}
下面是大體流程圖:
總結:
前期準備數據,瞭解需求;然後請求rest接口,遍歷各個文件下的照片,將照片轉成base64形式,再把這些參數傳進入接口,進行多次重複調用;再根據是否需要在同一個局域網內才能完成,因爲之前都是在測試環境,故將服務器與本機組到了同一個局域網中;最後自己是通過解析得到的數據結果(json數據),取到code碼、以及msg的具體說明和isattsck的值,根據不同的code碼值寫到不同的文件裏,進行分析,得出通過率與誤識率,然後評估此算法的優劣,再決定此算法是否可以用到實際的業務中,比如人臉打卡業務等等。