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码值写到不同的文件里,进行分析,得出通过率与误识率,然后评估此算法的优劣,再决定此算法是否可以用到实际的业务中,比如人脸打卡业务等等。