欢迎光临“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 提供的附件和应用程序储备。
第三方 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 等这些工具的用户会对这套工具比较熟悉。