GeoServer提供了REST接口,能完成大多数的服务器管理任务,方便我们从程序中实现资源的动态调度。官方文档既有API的详细解释,又有不少示例,在用户友好方面做的还是不错的。举个例子,官方文档中对Workspaces的操作如页面截图所示:
cURL作为97年就存在的文件传输工具,命令简单犀利,能完美支持各种类型的HTTP请求。对于常年混迹于各种命令行、shell之间的高级猿类来讲,用起来得心用手。但是,对于操着各种程序方言的普通猿来讲,想用起来起码需要一次语言之间的转换吧?慢着,官方文档竟然没有提供其他语言的用法!TBD?
好吧,没有现成的只能自己来了。这里推荐一个非常好用的HTTP客户端——Postman。没用过的自行百度吧,这里不再赘述。直接进入今天的主题,怎样使用Postman通过REST API接口与GeoServer进行交互呢?这里我们还是以工作空间的操作为例进行说明。
第一个示例
上图新建工作空间的cURL命令,-u选项是指定GeoServer的用户名和密码,-XPOST是指定发送POST请求,-H是指定该请求的Header内容,-d是POST请求发送的数据,该例子中是一个XML字符串,最后是API接口的地址。
好,我们在Postman中逐项设置。首先在Postman中新建一个请求,类型选为POST,接口地址自行填进去。
- 用户验证
需要Postman中设置用户名和密码,这里选择Basic Auth即可。这里我定义了一个变量{{baseURL}},来代替前面那段相同的URL。
- Headers
Headers标签里面指定Content-Type为text/xml。
- Body
Body标签里面指定要发送的数据,该例子中是原始字符串,我们就选择raw类型。
就这样,第一条命令就翻译完毕,可以点Send试一下了,请求的结果会显示在下面的Response框中。
从官方文档来看,GeoServer的接口支持XML和JSON两种格式。如果需要发送JSON内容的话,只需要改两个地方,一个是Headers标签中指定Content-Type为application/json;另一个是在Body中填写和XML对应的JSON字符串。
再来一个
上例中是发送POST请求,这节再举一个GET请求的例子。
想获取我们刚才创建的工作空间的详情,官方文档中是这样的:
比上一个例子更简单,只需要在Postman中填入Authorization和Headers标签的内容即可。Accept可以是text/xml,也可以是application/json,视需求而定。
由人工翻译到自动翻译
上述玩法其实还是挺麻烦的,只是把cURL命令经过人工翻译形成可操作的界面,其他方面毫无新意。Postman也充分考虑到了这一点,其中import功能可以完美地实现自动翻译。我们只需要把官方文档中的cURL命令复制粘贴到文本框中,就可以得到该命令对应的新请求,就是这么方便!
百尺竿头更进一步
如果只是做API接口测试的话,上面这些功能就已经足够强大了。但是,对于不同语言的程序开发人员来说,还希望知道在特定编程语言、甚至特定HTTP库中,该怎样实现发送请求啊?
其实,Postman早已考虑到了这种需求,目前已支持把请求生成多种编程语言的代码段,真正实现了一键转换。这个功能藏的比较隐蔽,见下图红框。只要点开Code按钮,就知道它支持多少种编程语言了。
Postman给我们通过REST API管理GeoServer带来了很大便利,还有很多功能有待发掘。其他命令请自行练习,举一反三。
参考
GeoServer文档地址:https://docs.geoserver.org/stable/en/user/rest/index.html
curl命令参考文档:https://curl.haxx.se/docs/manual.html