Python Web 服务开发者: 第 1 部分

Python Web 服务世界

Python 的座右铭一向是“装备齐全”,这是指在安装该语言时会附带一大套标准库和功能程序。本文概述了在 Python 中开发 Web 服务时可以使用的工具和功能程序。这些工具和功能程序包括内置的 Python 功能和第三方开放源代码的工具

0 评论:

Mike Olson(molson@fourthought.com)Fourthought, Inc.

Uche Ogbuji(uche@fourthought.com)Fourthought, Inc.

2001 年 1 月 01 日

  • 内容

欢迎光临“Python Web 服务开发者”专栏。但等等,请不要因为我们所说的“面向 Python 开发者”(for Python developer)而犹豫不前。这个专栏并不是只为 Python 高手,或者熟悉 Python 的人开的。我们将尽可能使其也适合初学者和那些只是对 Python 感到好奇的人。我们的目的是指引读者去阅读本系列中每个主题所需的相关背景信息的高质量参考资料。我们希望籍此使各种级别的 Python 开发者都能够从这个系列学到一些东西。但许多情况下,Python 所谓的可读性(有时也称之为可执行的伪代码)只是表示大多数读者能够几乎不费力地理解代码。

这个专栏将来会有大量的代码,这些专栏的代码将可供实习之用并且非常实用。在本系列的大多数文章中,我们将实际开发有用的 Web 服务,这些 Web 服务您稍加处理就能够为自己所用。所以,您不必进行复杂的底层开发就可以构建 Web 服务,工作效率高得出乎您的意料。在这篇开头的文章中,我们将探讨许多功能和资源,它们使 Python 成为一种这么好的开发 Web 服务的编程语言。

一点背景知识

因为您是在 Web 服务专区内,所以很可能已经知道 Web 服务是什么了 ― 如果还不知道,那么请参阅 参考资料部分的链接,阅读关于常规主题的一些优秀读物。但为了把 Python 放在 Web 服务的环境中,请容许我们后退一步,介绍一点背景知识。

Web 在十年前才出现,自那以后它就以惊人的速度向前发展。先是出现了最初的一系列互相联系的文章和链接。然后就出现了 CGI,通过它大家第一次了解了一点 Web 在革新软件开发方面的潜力:CGI 提供了用来显示动态内容的有限的、有高度针对性的功能。从这些基础上发展起了 Web 服务。

Web 服务与其它动态 Web 内容的区别之一就象是应用程序对象与组件的区别。对象是具有高度针对性的代码和数据束,它们被用来插入到应用程序中定义精准的插口(slot)。组件也是对象,但它们通常通用性更好,可重用性更高,可在各种应用程序和环境使用。通常,它们与正规的协议(例如 CORBA、DCOM 和 EJB [请参阅 业界术语分析])关联在一起以便与其它代码通信,描述它们借以访问其它代码的接口并在运行时发现和管理这些接口。

同样,从最基本的级别上来说,Web 服务只是动态 Web 内容的一个子类,它们与动态 Web 内容的区别在于它们的通用性、可重用性和正规协议(SOAP、UDDI、WebDAV [请参阅 业界术语分析]),这些协议标准化了它们的通信、接口定义、管理等等。

 

回页首

Python 为何如此流行?

Python 一直广泛支持各种基本的网际协议,再加上具有良好的可读性并且易于维护,这些使它成了动态编程的坚实基础。这里,我们列出了 Python 的一些对 Web 服务开发很有用的核心功能程序。这里列出的每一个功能程序都是随 Python 一起提供的,不需要再去下载或安装。

  • HTTP:该核心库包含成熟的 HTTP 1.1 服务器实现,同时包含文件和 CGI 服务器。为您自己定制这些东西非常容易,它们早已经帮助您使 Web 服务任务自动化了。自然也有进行 HTTP 请求的工具,包括低级 httplib (它使您可以控制 HTTP 请求的各个方面)和快速但不太正规的 urllib (它只用一个 URL 从适当的位置获得数据)。请注意,Python 还提供 SSL 支持,这允许通过 HTTPs 来保护 Web 站点的安全。
  • URL 的解析和构造:有一些模块用于把更自然的 Python 数据结构组成 URL,或者把 URL 分解为 Python 数据结构。这些模块使得 Web 服务很容易处理带请求参数和片段等内容的 URL。
  • CGI:有一整套工具用于解释 CGI 请求,使大家可以很容易地编写有效的 CGI 处理程序。
  • HTML(和 SGML):Python 附带用于解析 HTML 及其母语 SGML 的模块。
  • XML:在 XML 的简短历史上,Python 一直都大力支持 XML。在 Python 的标准库中有几个 XML 分析器、DOM 和 SAX 库。
  • FTP、SMTP、NNTP、POP、IMAP 等等:这个库包含其它这些重要网际协议的很多客户机模块。每个模块都提供对会话细节的非常适当的级别的控制,并提供用于把数据格式解析为更 Python 化的结构的令人印象深刻的工具箱。使用它们把 Web 服务与其它因特网应用程序关联起来很方便;例如,它们通过电子邮件提供事件通知。
  • 低级套接字:当您确实想亲自进行网络编程时,您可以不用上面提到的模块所提供的方便,而是随心所欲地在网络上玩那些位和字节。Python 库提供客户机和服务器套接字编程模块。
  • 浏览器控件:Python 提供了一个整洁的模块 webbrowser ,它用来启动和控制各种 Web 浏览器(包括 Netscape、Internet Explorer 和 Konqueror)。这是一个有用的工具,用于把传统的组件与内部网或类似环境内的 Web 服务关联起来。

有了这套齐全的装备,Python 就可以很好地涵盖 Web 服务的各个基本方面。然而,我们还提到了一些高级注意事项,这些注意事项使 Web 服务变得比较特殊。这些功能通常是第三方为 Python 提供的附件和应用程序储备。

业界术语分析

下面是本文中使用的一些行话的简短定义。

通用对象请求代理体系结构 (Common Object Request Broker Architecture,CORBA):Object Management Group 的面向对象组件的标准。

分布式组件对象模型(Distributed Component Object Model,DCOM):Microsoft 的面向对象组件的标准。

Enterprise JavaBeans(EJB):一个基于 Java 的组件开发标准。

简单对象访问协议(Simple Object Access protocol,SOAP):一种用于编写消息的规范,使用 HTTP 和 SMTP 等协议可以将遵守该规范的消息发送到 XML 格式的远程对象。

统一描述、发现和集成(Universal Description, Discovery and Integration,UDDI):一个基于 Web 的服务的目录的标准。

Web 文档编制和版本控制(Web Document Authoring and Versioning,WebDAV):修改和管理远程 Web 服务器上文档的标准。

文档对象模型(Document Object Model,DOM):对 XML 和 HTML 文档进行面向对象的访问的标准。

XML 的简单 API(Simple API for XML,SAX):使用基于事件的模型访问 XML 文档的规范。

安全套接字层(Secure Sockets Layer,SSL):对因特网和相似的网络上的通信进行加密的标准。

Web 分布式数据交换(Web Distributed Data Exchange,WDDX):将程序数据作为高度结构化的 XML 进行交换的模式。

 

回页首

第三方 Python 工具概览

除 Python 标准库提供的“齐全装备”以外,第三方还为 Web 服务开发(以及几乎您能梦想到的任何其它用途)添加了许多种工具。请参阅 参考资料部分以获得到一些站点的链接,这些站点上的内容将帮助您查找与 Python 一起使用的工具。这里讨论的软件都是开放源代码的。

XML 是一种用于 Web 服务的非常流行的数据格式。它的高度结构化和可扩展性、广泛的支持以及各种相关的标准使它成了一种用于编写服务的子组件之间的请求、响应和通信的流行格式。我们已经讨论过了 Python 的内置 XML 功能程序。还有许多第三方的 XML 功能程序。Python XML SIG 开发了 PyXML 包,这个包添加了各种解析器、DOM 和 SAX 工具、用于 WDDX 和 XML-RPC 的数据组织工具和形形色色的 XML 处理工具。还有 Sean McGrath 的 Pyxie,它用原始的方法处理 XML。

4Suite(由本文的作者共同开发的)中提供了一系列附加的 XML 工具,这些工具是以 PyXML 为基础构建的,并添加了许多与 XML 相关的功能程序,包括 DOM(瞬时的和持久的)、XPath、XPointer、XSLT、XLink、RDF 和 XInclude。只需使用这些功能程序,就可以开发 Web 服务的许多方面,并且需要的定制代码极少。特别是 RDF,它是最有发展前途的一种用来描述必须为 Web 服务编入索引的关系和数据的技术。Python 在 4Suite 和 James Tauber 的 Redfoot 框架中都有 RDF 支持。

SOAP 当然是 Web 服务最心爱的协议。SOAP 是一个协议,用于使用嵌入 HTML、SMTP 或其它较低级协议中的、严格指定的 XML 把消息发送到远程系统。Pythonware 的 soaplib 为 Python 提供了基本的 SOAP 和 XML-RPC 支持。目前 soaplib 和其它流行的 SOAP 实现之间有一些互操作性问题,但 soaplib 的一个新发行版即将出现,它承诺会改善互操作性并提供更广泛的 SOAP 支持。还可以从 Ken MacLeo 的 Scarab 项目得到一些比较粗糙的、陈旧的 SOAP 代码。

Fourthought 的 4Suite Server(也是由本文作者共同开发的)是一个基于 4Suite 的 XML 数据服务器,它为存储、管理、传输和处理 XML 提供“取出即可用”的支持。它支持使用 CORBA、HTTP 和非常基本的 SOAP 进行通信,并且不久将添加更多的协议,比如 WebDAV 和 SMTP。

Digital Creations 开发了 Zope,一个流行的基于 Python 的应用程序服务器;Zope 提供一般的对象服务、基于模板的 HTML 输出和 WebDAV。XML 支持仍在开发中。

Chuck Esterbrook 的 Webware 是一套用于在 Python 中开发基于 Web 的应用程序的工具。它与 Java servlet、JSP 之类的工具很相似。

最后,由于大多数用户仍然使用只支持 HTML 的 Web 浏览器访问 Web,能够处理 HTML 就成了大多数 Web 服务的一个重要部分。DOM 有一些构建 HTML 文档的工具,而 4Suite 可以从 DOM 或 XSLT 输出 HTML。如果您更倾向于基于模板的方法,那么可以使用 Robin Friedrich 的非常成熟的 HTMLgen 模块。

 

回页首

下一站:代码

但愿这些资源能帮助您开始学习。要尽可能多实践,因为从现在开始大部分代码都是解决现实问题的实用代码。在这个专栏的后面几篇文章中,我们将开发一个实用的 Web 服务:一个软件库服务。您会看到如何让本文中介绍的许多工具发挥作用。

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
  • 请单击文章顶部或底部的 讨论参与本文的 讨论论坛
  • 通过阅读 第二部分了解这个系列的大致目的。
  • 请阅读本系列的 第三部分
  • 我们的 Web 服务专栏作家 Graham Glass 在他的文章“ The Web services (r)evolution, Part 1”中对 Web 服务进行了一次非常好的概述。
  • Python是一个流行的、通用的应用程序开发语言,以其可读性、聪明的设计和全面的标准库著称。
  • 有许多在线 Python 介绍和教程。IBM developerWorks 已经发表了 Evelyn Mitchell 写的 Python 101。在 Linux 杂志上还有 Python Programming for Beginners。Python 文档附带一篇教程。Magnus Lie Hetland 写了一些面向 程序员和 非程序员的教程,这些教程已经被翻译为好几种语言。 Josh Cogliati 的教程也是非常不错的介绍。
  • Vaults of Parnassus是一个公开提供的 Python 软件的在线数据库。
  • Python 知识库常见问题问答是一个可以得到关于 Python 的各类问题的答案的好地方。
  • 在 David Mertz 的一些 developerWorks 专栏中,他讨论了 Python 中的 XML 处理。请参阅
  • 请阅读 Python Web 服务开发者 专栏
  • Python XML SIG开发了 PyXML包,这个包增强了对 Python 的本机 XML 支持。
  • Sean McGrath 的 Pyxie提供了 XML 解析和处理工具,这些工具一般使用面向行的方法,这种方法很适合开发者。Mr. McGrath 还写了 XML Processing with Python一书,由 Prentice-Hall 于 2000 年 2 月出版(ISBN:0130211192)
  • 4Suite和 4Suite Server 是由本文的两位作者合作开发的,它们实现了许多与 XML 相关的技术。
  • soaplib是 Pythonware 的 SOAP 实现。通过使用 Andrew Dalke 的 Lye,一个 COM 到 SOAP 的转换器,Windows 用户可以轻而易举地进入 SOAP。另一个 SOAP 实现是 Ken MacLeod 的 Scarab 项目。
  • James Tauber 的 Redfoot项目是 RDF 服务器的一个基于 Python 的框架。
  • Robin Friedrich 的 HTMLGen 提供了一种基于模板的方法来处理 HTML 文档。
  • Digital Creations 开发的 Zope是一个用于 Python 的通用应用程序服务器,它提供各种 Web 服务功能。
  • Chuck Esterbrook 的 Webware提供了一套 Web 开发工具,ASP、Java servlets、JSP 等这些工具的用户会对这套工具比较熟悉。

Python Web 服务开发者: 第 1 部分的更多相关文章

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

    戏说WSGI(Python Web服务网关接口) 当你在Python的世界中冒险,突然遭遇一只Web怪兽,你会选择什么武器对付它?在兵器谱上,下列兵器可谓名列前茅: Zope,厚重的长枪.较早出现的武 ...

  2. 使用uwsgi 部署python web服务

    uwsgi, wsgi协议的一个很好的实现,源码在这里:https://github.com/unbit/uwsgi c语言编写,有兴趣可以研究下. 上DEMO: wsgi_server.py def ...

  3. Windows下搭建Apache+Django+Python Web服务环境

    最近在学Django,想用Apache搭建一个服务器环境,因此在网上看了好多资料,很多都是用Python2.6和Apache2.2搭建的环境,不过我还是想用Python35和Apache24来搭建,具 ...

  4. Nginx与python web服务配置(Uwsgi& FastCGI)

    Uwsgi start uswgi uwsgi --harakiri 360000 --body-read-warning=10000 --max-fd=65536 -b 1000000 --http ...

  5. 基于IIS构建Pyathon Web服务

    本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...

  6. svn + nginx unit + python3自动化发布web服务方法

    本周将python web服务管理更换成nginx unit以后发现接口性能有了明显的提升,访问速度快了不少.不过有个很大的问题就是使用svn自动化发布以后,服务并没有刷新使用新的代码运行,而又不懂得 ...

  7. Python Web 框架原理

    Web Socket 所谓 Web 服务,本质上就是用户使用一个 socket 客户端(浏览器)去访问一个 socket 服务端. 下面是一个最基础的基于 socket 的 Python Web 服务 ...

  8. 【简说Python WEB】Web应用部署

    目录 [简说Python WEB]Web应用部署 应用层 缓存层 数据层 Gunicorn 的应用 1.安装Gunicorn 2.Gunicorn的启动 Nginx 的应用 1.docker方式部署安 ...

  9. 基于soap 的 python web services 服务开发指南

    文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...

随机推荐

  1. java:Spring框架4(Project,ER图)

    1.Project: ER图: applicationContext.xml: <?xml version="1.0" encoding="UTF-8"? ...

  2. 龙芯软硬件培训个人总结-day2

     今天最后一天,主要培训了BSP,QT,KVM云计算相关的内容.大致总结了一些自己关注的点.培训的资料已上传至服务器,如果需要可关注下方二维码,后台直接回复“资料”获取.关于实战的资料还未导出,等导出 ...

  3. 重叠IO 模型

    1. 重叠模型的优点 2. 重叠模型的基本原理 3. 关于重叠模型的基础知识 4. 重叠模型的实现步骤 5. 多客户端情况的注意事项 一.重叠模型的优点   1.可以运行在支持Winsock2的所有W ...

  4. 问题记录 | 记录PIL中Image.save的一个坑

    Image.save然后open数值是会变的 我找了一个下午终于找出问题所在,PIL的Image库中把图片resize了之后存在本地然后再读进来,与直接resize后的数值是不一样的. data_va ...

  5. /etc/sysctl.conf 控制内核相关配置文件

    /etc/sysctl.conf 用于控制内核相关的配置参数,而且它的内容全部是对应于 /proc/sys/ 这个目录的子目录及文件 [root@MongoDB ~]# ll /proc/sys to ...

  6. LayaAir疑难杂症之四:laya引擎自动断点到bundle.js文件中且无报错,但程序不再执行

    在一次断点调试中,突然程序不再按照博主指定的断点执行,莫名其妙端点到了bundle.js文件中的某一行中,这是不应该的,第一次时间反应就是引擎出了问题,但是总不能让博主卸载重装吧. 经过查找资料,询问 ...

  7. AKKA学习(二) 未完

    Actor调用 从上面的例子中,我们可以大概的对AKKA在JAVA中的使用有一个全局的概念.这里我们在稍微细致的讲解一下. 在JAVA中使用AKKA进行开发主要有这几个步骤: 定义消息模型. 创建Ac ...

  8. java中易错点

    1.A instanceof  B{这是没有好好利用java多态的表现} java中的二元操作符,测试A对象是否是B类的实例: 返回值:boolean类型 2.“==”与 “equals”的区别: = ...

  9. 微服务理论之二:面向微服务架构与传统架构、SOA对比,以及云化对比

    一.Monolith 网上对Microservice进行介绍的文章常常以Monolith作为开头,我也不会例外.原因是,知道了Monolith的不便之后才能更容易地理解Microservice架构模式 ...

  10. 优秀编程学习网站&博文记录

    记录优秀讲解知识点博客内容,侵删! 编程者学习网站 LearnKu终身编程者的知识社区 自动化测试内容 Python 接口自动化测试 应用开源接口网站:https://httpbin.org/#/St ...