目录

上一个主题

10. 自动化任务:GeoServer REST接口

下一个主题

10.2. 管理数据


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:

http://docs.python-requests.org/en/latest/