11.2.2、搭建RESTful API之使用PasteDeploy定制WSGI服务
来源:互联网 发布:xperia软件修复 初始化 编辑:程序博客网 时间:2024/05/16 17:33
WSGI服务的相关相关基础只是前面已经介绍,而且Paste模块也有所介绍。现在就一步一步实现paste模块的每个功能。
一、知识点讲解
1、为什么需要 PasteDeploy 模块? 一个 WSGI服务 的核心部分,是它的应用程序。如果WSGI服务的应用程序修改了,那么WSGI相应
的功能也就改变了。
2、通过配置文件来配置 WSGI 服务的应用程序,当需要对WSGI服务的应用程序进行修改(需要添加或删除某个功能模块)时,只需要简
单的修改下配置文件,而不需要修改 WSGI 的代码。
3、利用PasteDeploy来定制WSGI服务,大大增强了WSGI服务的伸缩性。
4、PasteDeploy定义的几类部件:
app(应用程序):WSGI服务的核心部分,用于实现WSGI服务的主要逻辑
app是一个callable object,接受的参数(environ,start_response),这是paste系统交给application的,符合
WSGI规范的参数. app需要完成的任务是响应envrion中的请求,准备好响应头和消息体,然后交给start_response
处理,并返回响应消息体。
filter(过滤器):一般用于一些准备性的工作,例如验证用户身份、准备服务器环境等。在一个filter执行完之后,可以直接返
回,也可以交给下一个filter或者app继续执行。
filter是一个callable object,其唯一参数是(app),这是WSGI的application对象,filter需要完成的
工作是将application包装成另一个application(“过滤”),并返回这个包装后的application。
pipeline(管道):由若干个filter和1个app组成。通过pipeline,可以很容易定制WSGI服务
composite(复合体):用于实现复杂的应用程序,可以进行分支选择。例如:根据不同的URL调用不同的处理程序
- app_factory是一个callable object,其接受的参数是一些关于application的配置信息:(global_conf,**kwargs),
global_conf是在ini文件中default section中定义的一系列key-value对,而**kwargs,即一些本地配置,是在ini文件中,
app:xxx section中定义的一系列key-value对。app_factory返回值是一个application对象
- filter_factory是一个callable object,其接受的参数是一系列关于filter的配置信息:(global_conf,**kwargs),
global_conf是在ini文件中default section中定义的一系列key-value对,而**kwargs,即一些本地配置,是在ini文件中,
filter:xxx section中定义的一系列key-value对。filter_factory返回一个filter对象
5、几点说明
(1)、一个配置文件有不同的段。Paste Deploy只关心前缀部分,例如(app:main、filter:error)中的app、filter。":"前面是类
型,后面是段的名字。 配置文件是一个简单的INI格式的文件(name=value)。
通常,配置文件中至少有1个或2个段。main段:[app:main]应用程序段,[server:main]服务器配置段
(2) [composite:...]表示将请求分发到不同的程序中去。 use = egg:Paste#urlmap 使用urlmap程序(Paste package中的
composite application)。 urlmap使用路径前缀将请求映射到另一个程序。
[app:hydrant] paste.app_factory = hydrant:app_factory in_arg = water [app:tap] paste.app_factory = tap:app_factory in_arg = water [app:shower] paste.app_factory = shower:app_factory in_arg = hot_water [app:drinking_fountain] paste.app_factory = drinking_fountain:app_factory in_arg = pure_water [filter:purifier] paste.filter_app_factory = purifier:filter_app_factory in_arg = water [filter:boiler] paste.filter_app_factory = boiler:filter_app_factory in_arg = water [pipeline:pip_to_shower] pipeline = boiler shower [pipeline:pip_to_drinking_fountain] pipeline = purifier drinking_fountain [composite:valve] use = egg:Paste#urlmap /hydrant = hydrant /tap = tap /boil/shower = pip_to_shower /purifier/drinking_fountain = pip_to_drinking_fountain [composite:main] use = egg:Paste#urlmap /master_valve: valvePasteDeploy模块最重要的是理清配置文件模块之间的关系,代码实现都是套路,很容易实现。
二、代码实现
配置文件:configure.ini
[app:main]paste.app_factory = wsgi_paste:app_factory:前面是类型,后面是段名。指定main应用程序对应的工厂方法,该工厂方法必须返回一个方法的实例,该方法便是处理WSGI服务
HTTP请求的应用程序。
应用程序:wsgi_paste.py :在configure.ini文件中引用wsgi_paste包,其实就是自定义的wsgi_paste.py文件。
from webob import Request,Responsefrom webob.dec import wsgifyfrom paste.deploy import loadappfrom wsgiref.simple_server import make_serverimport os@wsgify #应用程序def application(req): return Response('hello world!\n')#应用程序工厂方法def app_factory(global_config, **local_config): return applicationif __name__ == '__main__': configname = 'api-paste.ini' #配置文件 appname = 'main' print 'listen on 8000...' wsgi_app = loadapp('config:%s' % os.path.abspath(configname), appname) #绝对路径 httpd = make_server('127.0.0.1', 8000, wsgi_app) httpd.serve_forever()
定义configure.ini文件中引用的app_factory方法。直接返回application方法的实例。调用loadapp方法加载应用程序。
在一个api-paste.ini文件中,可以定义多个部件。
默认情况下,loadapp方法会把名为main的部件作为应用程序的入口。
输出结果:
另一个终端使用curl命令发送HTTP请求:
今天学习到这里了,回去睡觉!
- 11.2.2、搭建RESTful API之使用PasteDeploy定制WSGI服务
- 11.2.3、搭建RESTFUL API 之 带过滤器的WSGI服务
- 11.2.5、搭建RESTful API 之 实现WSGI服务的URL映射
- 使用CodeIgniter框架搭建RESTful API服务
- Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
- 11.2.4、搭建RESTful API 之 利用类来实现
- Python使用Flask搭建RESTful API
- 使用Flask搭建Restful API后端服务器
- Python使用Flask搭建RESTful API
- Jenkins RESTful API定制化
- yii2 RESTful access_token api 初步搭建2
- OpenStack设计与实现(五)RESTful API和WSGI
- OPEN API平台测试之Restful服务接入
- 【OpenStack源码分析之四】WSGI与Nova API服务启动
- spring4之搭建restful风格的web服务
- yii2 restful api搭建 实例
- yii2 restful api搭建 实例
- openstack restful api 使用
- 道路、桥梁与交通
- 【数据结构】算法9.17-9.18 哈希表-插入&查找
- 如何实现版本控制(判断是否为新版本,显示新特性)
- DRAM的结构之概括(一)
- hdu2087剪花布条[KMP]
- 11.2.2、搭建RESTful API之使用PasteDeploy定制WSGI服务
- 初识document.onkeydown及其兼容性问题
- win C盘清理工具,筛选后亲测安全
- struts2提供的数据校验
- hdu1203
- 浅析 mtd 子系统
- hibernate缓存学习之【一级缓存】
- 单例模式详解
- 【数据结构】算法10.1 插入排序-直接插入