Web服务器网关接口
维基百科,自由的百科全书
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
目录 |
要旨 [编辑]
以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。
WSGI[1] (有时发音作'wiz-gee')是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。
规范概览 [编辑]
WSGI有两方:“服务器”或“网关”一方,以及“应用程序”或“应用框架”一方。服务方调用应用方,提供环境信息,以及一个回调函数(提供给应用程序用来将消息头传递给服务器方),并接收Web内容作为返回值。
所谓的 WSGI中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:
- 重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象。
- 允许在一个进程中同时运行多个应用程序或应用框架。
- 负载均衡和远程处理,通过在网络上转发请求和响应消息。
- 进行内容后处理,例如应用XSLT样式表。
示例程序 [编辑]
用Python语言写的一个符合WSGI的“Hello World”应用程序如下所示:
def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield "Hello world!\n"
其中
- 第一行定义了一个名为app的callable[2],接受两个参数,environ和start_response,environ是一个字典包含了CGI中的环境变量,start_response也是一个callable,接受两个必须的参数,status(HTTP状态)和response_headers(响应消息的头)。
- 第二行调用了start_response,状态指定为“200 OK”,消息头指定为内容类型是“text/plain”
- 第三行将响应消息的消息体返回。
调用一个应用程序的示例 [编辑]
| 本章节需要扩充 (March 2011) |
调用一个程序并获取它的应答消息的例子如下所示:
def call_application(app, environ): body = [] status_headers = [None, None] def start_response(status, headers): status_headers[:] = [status, headers] return body.append app_iter = app(environ, start_response) try: for item in app_iter: body.append(item) finally: if hasattr(app_iter, 'close'): app_iter.close() return status_headers[0], status_headers[1], ''.join(body) status, headers, body = call_application(app, {...environ...})
WSGI兼容的应用和框架 [编辑]
支持WSGI的Web应用框架有很多:
- CherryPy
- Django[3]
- web2py
- TurboGears
- Tornado
- Pylons
- BlueBream
- Google App Engine
- Trac
- Flask
- Pyramid
- Bottle[4]
- weblayer[5]
- Webpy
影响 [编辑]
- 2003年: 原初的Python版本 [6]
- 2007年: Rack,Ruby版本 [7]
- 2008年: Lua WSAPI,Lua版本 [8]
- 2009年: JSGI,JavaScript版本 [9]
- 2009年: PSGI,Perl版本 [10]
- 2010年: Hack,Haskell版本 [11]
注释 [编辑]
- ^ PEP 3333, Python Web Server Gateway Interface v1.0
- ^ 在规范中,使用术语“callable”表示一个函数,方法,类或带有__call__ method实例
- ^ [1] Django with WSGI support
- ^ [2] Bottle Micro-Framework
- ^ [3] weblayer package for writing WSGI application
- ^ [4] WSGI
- ^ [5] Rack接口
- ^ [6] WSAPI接口
- ^ [7] JSGI接口
- ^ [8] PSGI接口
- ^ [9] Hack接口
外部連結 [编辑]
- PEP 333 -- Python Web Server Gateway Interface v1.0
- PEP 3333 -- Python Web Server Gateway Interface v1.0.1
- WSGI metaframework
- 关于WSGI的Wiki网站(英文)
- WSGI教程(英文)
- Hoxide · 2006-03-03 · WSGI简介
- 啄木鸟关于wsgi的介绍
|
||||||||||||||||||||||||||