Alan Hou的个人博客

第十五章 SOAP和REST API通讯

精通Python自动化脚本-运维人员宝典完整目录:

第一章 Python脚本概述
第二章 Python脚本调试和性能测试
第三章 单元测试-单元测试框架的介绍
第四章 自动化常规运维活动
第五章 文件、目录和数据处理
第六章 文件存档、加密和解密
第七章 文本处理和正则表达式
第八章 文档和报告
第九章 操作各类文件
第十章 网络基础 – Socket编程
第十一章 使用Python脚本处理邮件
第十二章 使用Telnet和SSH远程监控主机
第十三章 创建图形化用户界面
第十四章 处理Apache和其它的日志文件
第十五章 SOAP和REST API通讯
第十六章 网络抓取 – 从网站上提取有用的信息
第十七章 数据收集及报表
第十八章 MySQL和SQLite数据库管理

本章中我们将来看SOAP和REST API的基础知识。我们还会看实现SOAP和REST API的Python库。我们将学习Zeep库来使用SOAP和requests来使用REST API。我们将学习操作JSON数据的知识。接着看一个操作JSON数据的简单示例,比如将JSON字符串转化成Python对象和将Python对象转换成JSON字符串。

本章中我们将学习如下内容:

SOAP是什么?

SOAP是简单对象访问协议(Simple Object Access Protocol)。SOAP是一各路标准通讯协议,允许使用不同操作系统的进程。它通过HTTP和XML进行通讯,是一个web服务技术。SOAP API主要设计用于创建、更新、删除和还原数据的操作。SOAP API使用Web服务描述语言来描述web服务所提供的功能。SOAP描述所有功能和数据类型。它建立一个基于XML的协议。

通过库使用SOAP

这一部分中,我们将学习SOAP的Python库。有用于SOAP的不同库列举如下:

这些是Python中用于SOAP API的库。这一部分中我们仅会学习Zeep库。

要使用Zeep的功能,我们首先需要安装它。在终端中运行如下命令来安装Zeep:

Zeep模块是用于WSDL(Web Services Description Language)的文档。它生成服务的代码和文档并提供SOAP服务端的编程接口。lxml库用于解析XML文档。

下面我们来看一个示例。创建脚本soap_example.py并在其中编写如下代码:

运行脚本,我们将得到如下输出:

上例中,我们首先导入了zeep模块。第一步传入了网站名。然后创建了一个zeep客户端对象。前面使用的WSDL定论了一个简单的Method1函数,由zeep通过client.service.Method1来提供。它接收两个参数并返回一个字符串。

什么是RESTful API?

REST表示表述性状态传递(Representational State Transfer)。RESTful API有一种在web服务开发中使用的通讯方法。它是可作为因特网上不同系统间通信的通道的一类web服务。是一个应用接口,用于使用HTTP请求来对数据进行GET, PUT, POST和DELETE。

REST的优点是它使用更少的代码,非常适合在因特网上使用。REST API 使用统一接口。所有的资源通过GET, PUT, POST和DELETE运算处理。REST API使用GET来获取资源、PUT来更新资源或修改资源的状态,使用POST来创建资源,并使用DELETE来删除资源。系统使用REST API来达到更快的性能和可靠性。

REST API独立处理每一个请求。客户端向服务端发送的请求必须包含可用于了解请求内容的所有信息。

通过标准库使用RESTful API

这一部分,我们将学习如何使用RESTful API。要进行使用,我们需要用到Python的requests和JSON模块。下面我们来看一个示例。首先,我们将使用requests模块来从API获取信息。会用到GET和POST请求。

我们必须先安装requests库,方法如下:

下面我们会看一个示例。创建脚本rest_get_example.py并在其中编写如下内容:

运行该脚本,我们将得到如下输出:

上例中,我们导入了requests模块来获取请求。接着我们创建了一个请求对象req_obj,并从想要获取请求之处指定了一个链接。然后,我们进行了打印。所得到的输出是状态码200,表示访问成功。

下面我们将看一个POST请求示例。POST请求用于向服务器发送数据。创建一个脚本rest_post_example.py并在其中编写如下内容:

运行该脚本,我们将得到如下输出:

在上例中,我们学习了POST请求。首先我们导入了必要的模块requests和JSON。然后传入了URL。同时,我们以字典格式输出想要进行post的数据。然后,我们传入了headers。接着使用POST请求进行了post。我们得到的输出是状态码是200, 是一个成功状态码。

操作JSON数据

这一部分中,我们将学习JSON数据。JSON表示JS对象简谱(JavaScript Object Notation)。JSON是一个数据交换格式。它将Python对象以JSON字符串编码,并将JSON字符串解码为Python对象。Python有一个JSON模块来格式化JSON输出。它带有对JSON序列化和反序列化的函数。

这还有两个用于编码和解码的类,列出如下:

下面我们来看使用JSON模块的一些示例。首先我们来看从JSON到Python的转换。创建一个脚本json_to_python.py 并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们编写了将一个JSON字符串转换为Python对象的一段代码。json.loads()函数用于将JSON字符串转换为Python对象。

下面我们来看如何将Python对象转换为JSON。创建一个脚本python_to_json.py并在其中编写如下代码:

运行脚本,我们将得到如下输出:

上例中,我们将一个Python对象转换为了一个JSON字符串。 json.dumps()函数用于这一转换。

下面,我们来看如何将不同类型的Python对象转换为JSON字符串。创建一个脚本python_object_to_json.py并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们使用json.dumps()函数将不同类型的Python对象转换成了JSON字符串。在转换之后,Python列表和元组被转换成了数据。整型和浮点型数字被看作JSON数字类型。下表中显示Python与JSON的对应转换:

Python JSON
dict Object
list Array
tuple Array
str String
int Number
float Number
True true
False false
None null

总结

本章中,我们学习了SOAP API和RESTful API。还学习了用于SOAP API的Python库zeep和用于REST API的库requests。同时学习了如何处理JSON数据,如将JSON转换为Python及其反向转换。

下一章中,我们将学习网页爬取和实现这一任务的Python库。

课后问题

  1. SOAP 和 REST API之间的区别是什么?
  2. json.loads和json.load之间的区别是什么?
  3. JSON是否支持所有平台?
  4. 以下代码片断的输出是什么?
  5. 以下代码片断的输出是什么?

扩展阅读

退出移动版