参考指南:

Web API入门指南

http://www.cnblogs.com/guyun/p/4589115.html

用Python写一个简单的Web框架

http://www.cnblogs.com/russellluo/p/3338616.html

WSGI接口 def application(environ, start_response)

https://blog.csdn.net/tycoon1988/article/details/40394555

GET和POST两种基本请求方法的区别

https://www.cnblogs.com/logsharing/p/8448446.html

Web API :

面向如浏览器,移动设备等各种客户端,提供Http服务的框架。

支持基于HTTP的各种操作(get,post,put,delete)。

请求的回复格式支持JSON,XML,CSV等。

使用场景:

1)服务在http协议之上,利用http协议的各种功能;

2)服务需被各种客户端(尤其是移动客户端)调用。

WISG(Web Server Gateway Interface):

在Python中,WSGI(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(JavaScriptObject Notation, JS 对象标记):

是轻量级的数据交换格式

格式:双引号 "" 包裹健名,使用冒号 : 分隔,然后紧接着值:

如 {"firstName": "Json"}

优点:使用的字符比xml与html等少,大大节约传输数据占用的带宽;

语法格式与层次结构比较清晰,容易阅读。

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍json.dumps()函数是将字典转化为字符串.

get/post请求:

get:请求参数都是通过url传递,如url?param1=xxx&param2=xxx

post:请求参数通过request body传递,需要知道请求参数类型(如application/json、application/x-www-form-urlencoded、multipart/form-data、text/html等),url,返回结果格式,是否有是否有header、cookie等

实例:

实例1:启动一个简单web,访问时返回hello world!字符串

 # coding:utf-8

 #导入WISG(Web Server Gateway Interface)
from wsgiref.simple_server import make_server #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/plain')]
start_response(status,response_headers)
return ['Hello world!\n'] ip='0.0.0.0'
port=8089
httpd =make_server(ip,port,application)
print("server is started, port is 8089....")
httpd.serve_forever()

运行结果:

实例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 is 8089....")
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()函数是将字典转化为字符串
result=json.dumps(params)
return [result] ip='0.0.0.0'
port=8089
httpd =make_server(ip,port,application)
print("server is started, port is 8089....")
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 = params.get('name', [''])[0]
# 获取get中key为passwd的值
passwd = params.get('passwd', [''])[0]
# 获取get中key为tel的值
tel = params.get('tel', [''])[0] if name=='admin' and passwd=='' and tel=='':
result={'code':200,'message':"You get the flag"}
return json.dumps(result)
elif passwd!='':
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 is 8089....")
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 = int(environ.get('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 is 8089....")
httpd.serve_forever()

请求与应答:

Jmeter发送post请求,并查看结果

Web API学习笔记(Python实现)的更多相关文章

  1. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  2. Self-Host Web API 学习笔记

    ASP.NET Web API 不需要 IIS,直接使用控制台程序可以实现. 一.创建一个新的控制台程序,项目名为 HostApi 二.设置目标框架为.NET Framework 4 三.NuGet添 ...

  3. 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系 ...

  4. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  5. ASP.NET MVC Web API 学习笔记---Web API概述及程序示例

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  6. ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查. 目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的. 下面我们通过创建一个简单的Web API来管理 ...

  7. ASP.NET MVC Web API 学习笔记---第一个Web API程序【转】

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html 1. Web API简单说明 近来很多大型的平台都公开了Web API. ...

  8. ASP.NET MVC Web API 学习笔记---第一个Web API程序---近来很多大型的平台都公开了Web API

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  9. web前端学习笔记(python)(一)

    瞎JB搞]感觉自己全栈了,又要把数据库里面的内容,以web形式展示出来,并支持数据操作.占了好多坑.....慢慢填(主要参考廖雪峰的官网,不懂的再百度) 一.web概念 Client/Server模式 ...

随机推荐

  1. Linux启动顺序、运行级别及开机启动

    一.启动顺序 当我们经过BIOS引导,并选择了Linux作为准备引导的操作系统后,接下来的执行顺序如下:1.加载并执行内核 第一个被加载的东西就是内核.然后把内核在内存中解压缩,就可以开始运行了.2. ...

  2. java实现人民币数字转大写(转)

    原文:http://www.codeceo.com/article/java-currency-upcase.html 0 希望转换出来的结果为: 零元零角零分 1234 希望转换出来的结果为: 壹仟 ...

  3. ASP.NET页面之间传值的方式之Cookie(个人整理)

    Cookie Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息.当该用户再次访问您的网站时,应用程序 ...

  4. 2018-2019-20175205实验二面向对象程序设计《Java开发环境的熟悉》实验报告

    2018-2019-20175205实验二面向对象程序设计<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>< ...

  5. 按Enter登录,Esc退出

    回车登录,下图处,选择登录按钮的方法 下图是按ESC

  6. Navicat Premium 简体中文版 12.0.16 以上版本国外官网下载地址(非国内)

    国内Navicat网址是:http://www.navicat.com.cn 国外Navicat网址是:http://www.navicat.com 国外的更新比国内的快,而且同一个版本,国内和国外下 ...

  7. 【Diary】期中考+春游记

    4.22-4.24 期中考 周一 早上 赶来三楼电教厅自习,疯狂复习历史.想到下午考语文历史两大文科,不由得有点慌吧. 突然,沙雕体委说了一句: 下午考政治,你不背诵吗 下午 语文感觉正常发挥. 政治 ...

  8. github收藏夹

    技术面试必备基础知识 https://github.com/CyC2018/CS-Notes 程序员简历模板列表 https://github.com/geekcompany/ResumeSample ...

  9. 记一次JAVAWEB项目部署

    需求 原本服务器上tomcat部署了一个javaweb项目在80端口,这次要部署另一个javaweb项目在8090端口,或者同时部署在同一端口不同目录下. 解决方法 不同端口部署 不同端口部署我们需要 ...

  10. select样式重置

                div{                 //用div的样式代替select的样式                 width: 200px;                 ...