WebAPI学习笔记(Python实现)
参考指南:
Web API⼊门指南
⽤Python写⼀个简单的Web框架
WSGI接⼝ def application(environ, start_response)
GET和POST两种基本请求⽅法的区别
Web API :
⾯向如浏览器,移动设备等各种客户端,提供Http服务的框架。
⽀持基于HTTP的各种操作(get,post,put,delete)。
请求的回复格式⽀持JSON,XML,CSV等。
使⽤场景:
1)服务在http协议之上,利⽤http协议的各种功能;
2)服务需被各种客户端(尤其是移动客户端)调⽤。
WISG(Web Server Gateway Interface):
在Python中,(Web Server Gateway Interface)定义了Web服务器与Web应⽤(或Web框架)之间的标准接⼝.
利⽤WSGI,可以很⽅便写⼀个Web框架。
引⽤⽅式是:from wsgiref.simple_server import make_server。
application()函数就是符合WSGI标准的⼀个HTTP处理函数,它接收两个参数:
1)environ:⼀个包含所有HTTP请求信息的dict对象;
2)start_response:⼀个发送HTTP响应的函数。
urlparse解析URL参数模块:
可以对URL按照⼀定格式进⾏拆分或拼接。
urlparse.parse_qs()⽅法返回解析URL后的字典
Json(Object Notation, JS 对象标记):
是轻量级的数据交换格式
格式:双引号 "" 包裹健名,使⽤冒号 : 分隔,然后紧接着值:
如 {"firstName": "Json"}
优点:使⽤的字符⽐xml与html等少,⼤⼤节约传输数据占⽤的带宽;
语法格式与层次结构⽐较清晰,容易阅读。
j son.dumps()函数是将字典转化为字符串.
get/post请求:
get:请求参数都是通过url传递,如url?param1=xxx¶m2=xxx
post:请求参数通过request body传递,需要知道请求参数类型(如application/json、application/x-w
ww-form-urlencoded、multipart/form-data、text/html等),url,返回结果格式,是否有是否有header、cookie等
实例:
实例1:启动⼀个简单web,访问时返回hello world!字符串
1# coding:utf-8
2
3#导⼊WISG(Web Server Gateway Interface)
4from wsgiref.simple_server import make_server
5
6#application()函数是Python中符合WSGI标准的⼀个HTTP处理函数,返回是⼀个字符串
7def application(environ,start_response):
8#start_response如下调⽤就会发送HTTP响应的Header,注意只能调⽤⼀次start_response()函数发送Header。
9#start_response()函数两个参数,⼀是HTTP响应码,⼀是⼀组list表⽰的HTTP Header,每个Header⽤⼀个包含两个str的数组表⽰
10      status='200 OK'
11      response_headers = [('Content-type', 'text/plain')]
12      start_response(status,response_headers)
13return ['Hello world!\n']
14
15 ip='0.0.0.0'
16 port=8089
17 httpd =make_server(ip,port,application)
18print("server is started, port ")
19 httpd.serve_forever()
20
21
View Code
运⾏结果:
实例2:启动⼀个简单web,访问接⼝,返回解析URL的值
# coding:utf-8
#导⼊WISG(Web Server Gateway Interface)
from wsgiref.simple_server import make_server
import urlparse
#application()函数是Python中符合WSGI标准的⼀个HTTP处理函数,返回是⼀个字符串
def application(environ,start_response):
#start_response如下调⽤就会发送HTTP响应的Header,注意只能调⽤⼀次start_response()函数发送Header。
#start_response()函数两个参数,⼀是HTTP响应码,⼀是⼀组list表⽰的HTTP Header,每个Header⽤⼀个包含两个str的数组表⽰    status='200 OK'
response_headers = [('Content-type', 'text/html')]
start_response(status,response_headers)
#调⽤urlparse的parse_qs解析URL参数,并返回字典
query_args=environ['QUERY_STRING']
params = urlparse.parse_qs(environ['QUERY_STRING'])
print(str(params))
return [str(params)]
ip='0.0.0.0'
port=8089
httpd =make_server(ip,port,application)
print("server is started, port ")
httpd.serve_forever()
运⾏结果:
实例3:启动⼀个简单web,访问接⼝,返回解析URL的值(n个变量),JSON格式
# coding:utf-8
#导⼊WISG(Web Server Gateway Interface)
from wsgiref.simple_server import make_server
import urlparse
import json
#application()函数是Python中符合WSGI标准的⼀个HTTP处理函数,返回是⼀个字符串
def application(environ,start_response):
#start_response如下调⽤就会发送HTTP响应的Header,注意只能调⽤⼀次start_response()函数发送Header。
#start_response()函数两个参数,⼀是HTTP响应码,⼀是⼀组list表⽰的HTTP Header,每个Header⽤⼀个包含两个str的数组表⽰    status='200 OK'
response_headers = [('Content-type', 'text/html')]
start_response(status,response_headers)
#调⽤urlparse的parse_qs解析URL参数,并返回字典
query_args=environ['QUERY_STRING']
params = urlparse.parse_qs(environ['QUERY_STRING'])
#返回的字段,需要转换为字符串作为函数的输出
print(str(params))
#json.dumps()函数是将字典转化为字符串
webserver接口开发result=json.dumps(params)
return [result]
ip='0.0.0.0'
port=8089
httpd =make_server(ip,port,application)
print("server is started, port ")
httpd.serve_forever()
返回结果:
实例4:启动⼀个简单web,get⽅法访问接⼝,根据输⼊的值返回判断结果(JSON格式)
# coding:utf-8
#导⼊WISG(Web Server Gateway Interface)
from wsgiref.simple_server import make_server
import urlparse
import json
#application()函数是Python中符合WSGI标准的⼀个HTTP处理函数,返回是⼀个字符串
def application(environ,start_response):
#start_response如下调⽤就会发送HTTP响应的Header,注意只能调⽤⼀次start_response()函数发送Header。
#start_response()函数两个参数,⼀是HTTP响应码,⼀是⼀组list表⽰的HTTP Header,每个Header⽤⼀个包含两个str的数组表⽰ status='200 OK'
response_headers = [('Content-type', 'text/html')]
start_response(status,response_headers)
#调⽤urlparse的parse_qs解析URL参数,并返回字典
query_args=environ['QUERY_STRING']
params = urlparse.parse_qs(query_args)
# 获取get中key为name的值
name = ('name', [''])[0]
# 获取get中key为passwd的值
passwd = ('passwd', [''])[0]
# 获取get中key为tel的值
tel = ('tel', [''])[0]
if name=='admin'and passwd=='123456'and tel=='139':
result={'code':200,'message':"You get the flag"}
return json.dumps(result)
elif passwd!='123456':
result={'code':404,'message':"oh, passwd is wrong!"}
return json.dumps(result)
elif name!='admin':
result={'code':404,'message':"oh, name  is wrong!"}
return json.dumps(result)
else:
result={'code':404,'message':"oh,what are you doing"}
return json.dumps(result)
#返回的字段,需要转换为字符串作为函数的输出
print(str(params))
#json.dumps()函数是将字典转化为字符串
#result=json.dumps(params)
return [result]
ip='0.0.0.0'
port=8089
httpd =make_server(ip,port,application)
print("server is started, port ")
httpd.serve_forever()
返回结果:
实例5:启动⼀个简单web,post⽅法访问接⼝,根据输⼊的值返回结果(JSON格式)
# coding:utf-8
#导⼊WISG(Web Server Gateway Interface)
from wsgiref.simple_server import make_server
import json
from cgi import parse_qs, escape
#application()函数是Python中符合WSGI标准的⼀个HTTP处理函数,返回是⼀个字符串
def application(environ,start_response):
#start_response如下调⽤就会发送HTTP响应的Header,注意只能调⽤⼀次start_response()函数发送Header。
#start_response()函数两个参数,⼀是HTTP响应码,⼀是⼀组list表⽰的HTTP Header,每个Header⽤⼀个包含两个str的数组表⽰
status='200 OK'
response_headers = [('Content-type', 'application/json')]
start_response(status,response_headers)
#environ是当前请求的所有数据,包括Header和URL,body #当请求⽅法是POST的时候,查询字符串将从HTTP请求体中传递⽽不是通过URL。
#请求体是WSGI服务器提供的类似于环境变量的wsgi.input⽂件 #有必要知道应答体的⼤⼩,以便从wsgi.input中读出它。WSGI明细规定,CONTENT_LENGTH变量来存储⼤⼩,它可以为空或者被忽略,所以读它的时候把它放到⼀个try/except块中try:
request_body_size = ('CONTENT_LENGTH', 0))
except (ValueError):
request_body_size = 0
print("request_body_size is:"+str(request_body_size))
request_body = environ["wsgi.input"].read(request_body_size)
print("request_body is:"+request_body)
# 获取get中key为name的值
name=parse_qs(request_body).get("name", [""])[0]
# 获取get中key为passwd的值
passwd = parse_qs(request_body).get('passwd', [''])[0]
print(name,passwd)
#返回的字段,需要转换为字符串作为函数的输出
#json.dumps()函数是将字典转化为字符串
#result=json.dumps(params)
return [request_body]
ip='0.0.0.0'
port=8089
httpd =make_server(ip,port,application)
print("server is started, port ")
httpd.serve_forever()
请求与应答:
Jmeter发送post请求,并查看结果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。