第12章 传输和共享对象

我们在第9章“序列化和保存——JSON、YAML、Pickle、CSV和XML”的基础上再介绍一些序列化方法。当我们需要传输一个对象时,通常会做某种表述性状态传输(Representational State Transfer,REST)。当我们序列化对象时,实际上是在创建对象状态的表示,这种表示可以被传输到另外一个进程中(通常在另外一个主机上),另外一个进程可以根据这个状态的表示和一个本地定义的类来创建原始对象的对应版本。

有很多种方式执行REST操作。其中一个方面是可以使用的状态表示;另外一个方面是控制传输过程的协议。我们不会介绍这些方面中所有可能的组合,相反地,我们只关注其中两种组合。

对于互联网的传输,我们会用HTTP协议实现CRUD操作,这通常被称为REST服务器。我们也会介绍如何实现RESTful服务。它会基于Python的Web服务网关接口(Web Service Gateway Interface,WSGI)的实现——wsgiref包。

对于本地进程间的通信,我们会介绍multiprocessing模块提供的本地消息队列。这里有许多不错的队列管理产品,但是,本章我们只关注标准库中提供的实现。

这种处理过程是基于使用JSON或者XML表示对象。对WSGI而言,为了定义Web服务器的事务,我们会添加HTTP协议和一组设计模式。对于multiprocessing,我们会添加一个处理池(processing pool)。

当使用REST传输时还有一点需要考虑:数据源可能是不可信的。我们必须实现一些安全机制。当数据以常见的方式表达时,例如JSON和XML,有一些安全问题需要考虑。YAML引进了一种安全机制并且支持安全负荷运行,具体请参见第9章“序列化和保存——JSON、YAML、Pickle、CSV和XML”。由于这些安全问题的存在, ...

Get Python面向对象编程指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.