Web服务器网关接口

✍ dations ◷ 2024-12-26 00:42:38 #应用程序接口,Python

Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。

以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。

WSGI (有时发音作'wiz-gee')是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。

WSGI区分为两个部分:一为“服务器”或“网关”,另一为“应用程序”或“应用框架”。在处理一个WSGI请求时,服务器会为应用程序提供环境信息及一个回调函数(Callback Function)。当应用程序完成处理请求后,透过前述的回调函数,将结果回传给服务器。

所谓的“WSGI 中间件”同时实现了API的两方,因此可以在WSGI服务器和WSGI应用之间起调解作用:从Web服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:

用Python语言写的一个符合WSGI的“Hello World”应用程序如下所示:

def app(environ, start_response):    start_response('200 OK', )    yield "Hello world!\n"

其中

调用一个程序并获取它的应答消息的例子如下所示:

def call_application(app, environ):    body =     status_headers =     def start_response(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, status_headers, ''.join(body)status, headers, body = call_application(app, {...environ...})

WSGI兼容的应用和框架

支持WSGI的Web应用框架有很多:

相关