WSGI 概念阐述
WSGI(Web Server Gateway Interface)指的是服务器网关和应用程序之间的通用接口规范,Python 中在 PEP 33331 中详细描述了这个规范。
WSGI 规范分为两个部分:一为“服务器”或“网关”,另一为“应用程序”或“应用框架”。在处理一个WSGI请求时,服务器会为应用程序提供环境信息及一个回调函数,当应用程序完成处理请求后,通过前述的回调函数,将结果回传给服务器。
所谓的 WSGI 中间件同时实现了API的两方,因此可以在WSGI服务器和WSGI应用之间起调解作用: 从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器,而且还能用来提供一些其他有用的功能,比如扩展性 API、内容转换、路由等。
In addition to "pure" servers/gateways and applications/frameworks, it is also possible to create "middleware" components that implement both sides of this specification. Such components act as an application to their containing server, and as a server to a contained application, and can be used to provide extended APIs, content transformation, navigation, and other useful functions.
“中间件” 组件可以执行以下功能:
重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象。
允许在一个进程中同时运行多个应用程序或应用框架。
负载均衡和远程处理,通过在网络上转发请求和响应消息。
进行内容后处理,例如应用XSLT样式表。
相关资料:
- pep-3333 详细解释了 WSGI 规范
- 廖雪峰 python 教程 中文读物
WSGI 流程
Paste 库
Python paste 或者说 paste 是 python web 开发中常用的工具库,也被看成a framework for web frameworks
。他包含了一系列的 python module 来帮助实现 web 应用,包含的模块可以划分为三类:
- WebOb 对 WSGI 上下文、请求和响应进行包装
- Paste Deploy 可以发现和配置 WSGI 的 Server 和 Application
- Paste Script, WebTest, ScriptType, INITools, Tempita, WaitForIt, WPHP, WSGIFilter, and WSGIProxy 等一些周边的工具
Paste deploy
Paste deployment 是一套用来发现和配置 WSGI 应用和服务器的框架,它可以通过配置文件 (在我们的 demo 中就是 config.ini) 或者python egg 来创建 WSGI程序。简单来说,WSGI 是规范,然后 Paste deployment 实现了这种规范。同样实现这种规范的还有很多个 python 库。WebOb
WebOb 是一个对 WSGI 上下文环境(environ)和 request 数据进行了包装,同时提供了很方便的工具来完成 WSGI 整个过程的框架,使用起来比较简单。
相关资料:
Routes
Routes 是 Rails routes system (Rails 是 Ruby 语言的框架,话说这个框架太出名了,以至于提起 Ruby 就一定会说到 Rails) 的python 实现。
Routes 用来 mapping url 和处理这个 url 的 action,也可以根据 url 反向生成 mapping,是比较实用的路由框架,我们主要关注的是 url mapping
和 RESTFul uri mapping
这一块。
参考资料:
1、 官方文档
2、 中文读物
3、 routes 模块简介
DEMO 项目
该项目为本人组内分享编写的 demo 工程,其中包含比较详细的注释和尽可能多的使用了上述项目,以此来模拟 OpenStack 的开发过程。