10.1. 引入REST¶
那么,REST是什么?缩写代表 REpresentational State Transfer ,并根据状态转换定义客户机-服务器交互。 来自客户端的每个请求都是到新状态的转换。服务器发送的响应表示转换后的应用程序状态。
表述性状态转移是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。 需要注意的是,REST是设计风格而不是标准。REST通常基于使用 HTTP ,URI, 和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准。
听起来是不是太复杂了?从理论上讲,您可能会发现它是非常规的, 特别是当您习惯于使用具有状态交互的客户机/服务器时。 REST是无状态的,一旦你得到了一般的想法,你就会发现它非常简单。
尽管REST通常被认为是一个 WEB 界面,但实际上它要多得多。 R EST一词是由Roy T.Fielding在他的博士论文中定义的, 他是 HTTP 协议设计背后最重要的人之一。 REST描述客户机和服务器之间的交互, 并通过从任何协议中抽象出来来实现。 它描述了一组操作,服务器必须实现这些操作, 客户端可以使用这些操作。 当然,在实现中,必须选择一个协议,例如 HTTP 。 您还可以开发一个没有 HTTP 的REST接口。
大部分对REST的介绍是以其正式的定义和背景作为开场的。 这里提出一个简要的定义:REST定义了Web的使用标准(这和大多数人的实际使用方式有很大不同),例如 HTTP 和URI。 如果你在设计应用程序时能坚持REST原则,那就预示着你将会得到一个使用了优质Web架构(这将让你受益)的系统。
请参阅以下链接以了解有关REST的更多信息:
GeoServer 的REST接口使用 HTTP 并定义一组操作和资源。操作是从 HTTP 派生的, 因此您可以执行GET、POST、PUT和DELETE操作。资源是GeoServer 配置的构建块, 包括工作空间、数据存储、层等。
10.1.1. 使用REST¶
那么如何定义和使用REST呢?
REST定义了一组从 HTTP 协议定义的操作;那么如何与之交互呢? 使用浏览器可以是向服务器发送 HTTP 请求的一种常见方式; 当您浏览Internet并使用GeoServer web界面时,几乎每天都这样做! 但使用浏览器并不是一种简单的自动化任务的方法;它需要人工交互。 我们需要一些能让我们建立小程序的东西。
REST中的资源所指的不是数据,而是数据和表现形式的组合,不管是图片,Word还是视频文件,甚至只是一种虚拟的服务, 也不管你是XML格式、txt文件格式还是其它文件格式,全部通过 URI 对资源进行唯一的标识。
有很多不同的工具可以让您与REST交互。您可以使用Java或PHP等编程语言, 也可以在Windows或任何Linux shell中使用PowerShell等脚本语言。 在本章中,我们将看到编程语言Python和cURL中的示例。 Python是一种利用简单性和代码可读性的编程语言,因此用它创建小程序非常容易。 cURL是一个库和命令行工具,可以很容易地合并到简单的shell脚本中。 这两种工具都允许用户以非常简单的方式创建REST请求,即通过编写几行代码。 这样可以避免您被复杂的语法分散注意力。
在本章中,假设您已经安装了Python和cURL。如果您使用的是Linux系统, 很可能您已经安装并配置好了,或者您可以依赖您的发行包系统来安装最新版本。
对于Windows,可以从项目站点获取Python http://python.org/ .
cURL可以作为一个源代码,对于勇敢者, 或者作为一个二进制包从 http://curl.haxx.se/download.html .
10.1.2. 行动时间–安装Requests库¶
我们之前说过,Python的主要目标是简单性和代码可读性,但不幸的是,情况并非总是如此。 使用标准的Python库与REST进行交互是非常困难的。幸运的是,有一个开源项目可以解决这个问题。 这个项目产生了一个名为 Requests ,我不得不说它确实是一个合适的名字。所以让我们安装它!
1.第一步,您需要下载包含库代码的ZIP或TAR存档:
~$ wget https://github.com/kennethreitz/requests/tarball/master -O master.tar.gz
~$ ls -al
drwxrwxr-x 2 stefano stefano 4096 Oct 1508:01./
drwxr-xr-x 9 stefano stefano 4096 Oct 15 07:41 ../
-rw-rw-r-- 1 stefano stefano 720204 Oct 15 08:02 master.tar.gz
2.现在提取存档内容:
~$tar xvfz master.tar.gz
…
3.输入新文件夹并将其安装到网站包中:
~$ cd kennethreitz-requests-c03e893
~$ sudo python setup.py install
4.安装现已完成。通过以下方式打开Python并导入新库来进行检查:
>>> import requests
刚刚发生了什么?¶
您将请求库作为网站包安装在Python安装中。现在可以在任何Python程序中使用它, 利用它强大的对象与 HTTP 协议交互。
Requests是一个由Kenneth Reitz启动的开源项目。 你可以下载并以一种非常自由的方式使用它。它是根据ISC许可证发布的。 您还可以在GitHub上分叉并添加特性。下面的链接将引导您到请求download page: