戏说WSGI(Python Web服务网关接口)--[转载]

当你在Python的世界中冒险,突然遭遇一只Web怪兽,你会选择什么武器对付它?在兵器谱上,下列兵器可谓名列前茅:

  • Zope,厚重的长枪。较早出现的武器形态。该武器非常之强悍,无坚不摧,无物不破。而且适合在军队中使用,排兵布阵集团作战效果更佳。然而要用好Zope要花上很长的时间,俗话说“月棍年刀一辈子枪”,可见其难度。
  • TurboGears,威武的刀。快意江湖必备之物。其打造者熟知江湖规矩,颇有武林盟主之风,遇事通常拉帮结伙,分派任务,决计不会把所有事情都揽在自己身上。
  • Django,飘逸的剑。非常内敛,据说使用该武器的高手通常是独行侠,他们的格言是:一剑在手,夫复何求?
  • Web.py,小巧的匕首,刺客的最爱。常被用来执行特殊任务。
  • pylons,诡异的鞭, 传言是Ruby世界的rails披上了Python的外衣,使用起来一定要小心,因为你不知道它会缠住敌人的脖子还是自己的脖子。

然而,我们今天要说的并不是这些武器,而是一种心法。毕竟武器的使用只是“招法”,而心法是招法的灵魂,心法一通,招法百通。这就是由马里奥创造的“管道心法”,西方大陆称其为WSGI(Python web服务网关接口)。

马里奥是一位水管工,常年钻在水管中苦心研究武术。马里奥发现,其实武器无所谓高下,最重要的是看使用武器的人和你要对付的对象。所谓一寸长,一份 强,如Zope威力强大,用来对付大型怪兽很合适,却难免滞重;而一寸短,一份险,如web.py在应付小型灵敏怪兽时有其独特优势。所以单单评论武器的 优劣根本是空泛之谈。于是乎,马里奥在水管中冥思苦想十余载,终于发现了适用于所有武器的心法。掌握此心法,使用任何武器都能游刃有余。由于马里奥是在水 管中受到了启发,故命名为“管道心法”。本文作者在游历时有幸发现此心法,并在“心内求法”上流传出来。传说上古时期的大神道格拉斯·麦克罗伊在参与创世时,曾经构筑了称为Pipeline的时空奇点,用以连接stdout和stdin。马里奥是否受此启发我们不得而知,但“管道心法”确实与此有类似之处:

WSGI是马里奥在探索管道的时候发现的一种连接件,它非常简单,入口处提供一个start_response,用于回流(回 调,callback),入口会连接到出口的一个函数,并传递environ字典和start_response作为参数;而出口处的函数先是调用 start_response并传递status和header,然后再返回content。由于这段心法有些拗口,马里奥演示了唯一的招式,并声明其实 所有的招式都可以从这招中演化出来:

def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)return ['Hello']

马里奥还发现,WSGI其实可以串联起来,为了区分,马里奥将下水管的入口叫做web server,只能接受外界的请求并调用下一段管件的函数;中间的管件叫做middleware,既可以接收上一段管件的请求,又可以调用下一段管件的函数;管道的终点叫做web app,只能被上一段管件调用。

为了避免后人误解,马里奥最后强调:武器是死的,好的武器只有在合适的人手里才能发挥最大的威力,争执于武器的好坏毫无意义。
马里奥最后将这段心法奉献给了PEP,PEP将其编号为333。

时间: 2024-08-04 04:54:38

戏说WSGI(Python Web服务网关接口)--[转载]的相关文章

Python 搭建Web站点之Web服务器网关接口_python

在 Python 搭建Web站点之Web服务器与Web框架 中我们弄清楚了Web 服务器.Web 应用程序.Web框架的概念.对于 Python 来说,越来越多的 Web 框架面世,在给我们更多选择机会的同时,也限制了我们对于 Web Server 的选择.同样是有着很多 Web 框架的Java,因为有着 servlet API 的存在,任何Java Web框架写的应用程序都可以运行在任意一个 Web Server 上. Python 社区当然也需要这样一套 API,来适配Web服务器和应用程序

从零开始搭建论坛(二):Web服务器网关接口

[引自selfboot的博客]在 从零开始搭建论坛(一):Web服务器与Web框架 中我们弄清楚了Web 服务器.Web 应用程序.Web框架的概念.对于 Python 来说,越来越多的 Web 框架面世,在给我们更多选择机会的同时,也限制了我们对于 Web Server 的选择.同样是有着很多 Web 框架的Java,因为有着 servlet API 的存在,任何Java Web框架写的应用程序都可以运行在任意一个 Web Server 上. Python 社区当然也需要这样一套 API,来适

HTSQL 2.3.0发布 Web服务网关

HTSQL 是一款基于URI的http://www.aliyun.com/zixun/aggregation/22.html">关系数据库的高级查询语言,同时也是一个Web服务网关.它是开放源代码,使用了 Web 服务层对数据库访问进行封装,并将 HTTP 请求转成 SQL 命令并返回查询结果,格式是 HTML 或者 JSON.它配备了开放源代码的数据库系统,如MySQL,PostgreSQL,SQLite,等.它是得到商业许可使用于微软SQL和Oracle. HTSQL 2.3.0该版本

oRestE 2.0发布 数据库的Web服务网关

oRestE是一个数据库的http://www.aliyun.com/zixun/aggregation/13729.html">Web服务网关,提供一个快速的方法来显示RESTful界面的数据库,无需编写构建SOAP请求的代码.它是以Erlang.MochiWeb和Webmachine的基础上运行,特点是轻型,稳定和快速. oRestE 2.0版本加强了使用性能:每个数据库连接和SQL文件过程的方法.升级到最新的Web机器. 安装说明: 安装环境: erlang make unixodb

利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存

[编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便,软件开发简单,而且据说运行性能优于其它脚本语言.(虽然最新版本的 PHP.PHP 7 可能会与它展开激烈竞争.) 所有人都希望自己的网站和应用程序运行得更快一些.但是,每个网站在流量增长或骤然出现流量峰值时都很容易发生性能问题.甚至宕机(这一般会在服务器最繁忙的时候发生).此外在运行期间,无论是流

使用 PowerDesigner 9.5 创建 Web 服务

web|创建 使用 PowerDesigner 9.5 创建 Web 服务   Sybase 公司PowerDesigner 总设计师Xiao Wang撰稿   Web 服务允许您以标准格式提供现有的或新增的功能,并且允许用户和应用程序从任何位置访问它们. PowerDesigner 9.5 同时针对 Microsoft .NET 和 Java 引入了完善的 Web 服务设计和生成机制.使用 PowerDesigner 9.5,您可以专注于 Web 服务的设计,而将所有必需的生成.实现构造的任务

Web服务数据库访问中间件的实现

web|web服务|访问|数据|数据库 摘要:本文分析现有的数据库访问中间件的现状,指出其中存在的问题,得出应用新技术的必要性.开发了一个基于Web服务技术的数据库访问中间件WSDBM,并以一个应用实例验证了该中间件的有效性.关键词:Web服务:数据库访问中间件:.Net 1  引言随着Intranet/Internet网络的迅猛发展,面向网络的分布式数据库成为支持Internet服务的关键,传统的数据库访问技术已渐渐不能满足分布式应用集成的需要.[1]利用新技术,研究和开发新的数据库访问中间件

Java Web服务: WS-Trust和WS-SecureConversation

了解 WS-SecureConversation 如何能改善 Web 服务的安全性能 简介:WS-Security 为 SOAP 消息交换添加了企业级的安全特性,但却有大量的性能损失.WS-Trust 构建于 WS-Security 基础上,提供了一种交换安全令牌的方式,WS-SecureConversation 构建于 WS-Security 和 WS-Trust 基础上,改善了进行中的消息交换的性能.Dennis Sosnoski 将继续他的 Java Web 服务 专栏系列,本期文章将介绍

web服务 使用soapui可以正常调用, 使用wsdl生成C#代理类 ,添加到项目中调用,提示地址无法访问,谁懂?

问题描述 客户给的web服务的地址是负载均衡服务器的路径http://188.88.1.40:37006/ISBH/ws/CHNISBHService,客户给了web服务的wsdl以及xsd,使用vs的自带工具wsdl命令生成代理类文件,添加到项目中,调用返回"无法访问",但是使用soapui加载http://188.88.1.40:37006/ISBH/ws/CHNISBHService却可以调用web服务的接口,有没有明白的??急求!!! 解决方案 解决方案二:有没有遇到这种情况的