Portal for ArcGIS 可以完全通过向 ArcGIS REST API 发送的请求进行管理。 即使在使用 Portal for ArcGIS 网站来管理门户时,对 API 的调用仍可在后端进行。 要编写管理 Portal for ArcGIS 的脚本,需要选择一种可以构建 URL、进行 HTTP 请求和解析 HTTP 响应的脚本语言。 本帮助系统中的示例使用的是 Python。
要特别注意,使用 API 不要求运行脚本的计算机上安装有任何 Esri 软件。 仅需提供能够对门户进行 HTTP 请求的环境。
使用 ArcGIS REST API 管理门户入门
要使用 ArcGIS REST API,需为待执行的操作创建 HTTP 请求并包括该操作所需的参数。 熟悉可用的管理操作及其所需参数的一个简单方法是使用 ArcGIS Portal Directory。
使用 ArcGIS Portal Directory
ArcGIS Portal Directory 由两款 Web 应用程序提供,可帮助您了解如何为门户管理编写脚本。 ArcGIS Portal Directory 在概念上与 ArcGIS Server Administrator Directory 和 Services Directory 相似。 如关于 ArcGIS Portal Directory 中所述,可用的任务随应用程序的不同而变化。 应用程序的 URL 的格式如下:
- https://webadaptorhost.domain.com/webadaptorname/portaladmin
- https://webadaptorhost.domain.com/webadaptorname/sharing/rest
可将 ArcGIS Portal Directory 视为通过 REST API 显示的 Portal for ArcGIS 资源的列表。 您可以导航 ArcGIS Portal Directory 中的链接以了解在管理 Web 服务请求中要使用哪些 URL 和参数。 然后,您可以格式化这些请求,并使用所选择的脚本语言通过 HTTP 发送这些请求。
尝试使用 ArcGIS Portal Directory 执行管理任务。 记下您需要输入的参数,并在对服务器进行请求时检查浏览器地址栏中的 URL。 查看请求和响应的完整内容时,可能会用到 Web 开发者工具(例如 Fiddler 或 Firebug)。 当尝试通过 Python 或其他脚本语言构建您自己的管理 HTTP 请求时,此信息尤其重要。
尽管您可以交互使用 ArcGIS Portal Directory 来实际执行管理任务,但此程序最好用作学习工具来帮助您熟悉 REST API。 门户管理专用的 Web 应用程序是 Portal for ArcGIS 网站。
在脚本中获取和使用令牌
不论您何时通过其网站或 ArcGIS Portal Directory 管理门户,都需要提供具有对门户适当权限的帐户的用户名和密码。 同样的概念也适用于编写脚本时。
但与访问门户网站或 ArcGIS Portal 目录(浏览器将透明处理身份验证过程)不同的是,您必须知道使用脚本管理门户时进行身份验证的方式。
如果将门户配置为使用内置帐户和令牌身份验证,您可以使用其管理帐户和 URL 与在 ArcGIS Portal Directory 中使用的管理帐户和 URL 相同的脚本。 如果门户是通过组织特定登录帐户和 Web 层身份验证进行配置的,则建议您将脚本绕过 Web Adaptor 并使用安装 Portal for ArcGIS 后创建的初始管理员帐户。
在任一情况下,门户都将返回一个令牌(即一个特殊的字符串),以向门户传达您具有执行某些类型的操作的权限。 对门户进行的任何 Web 服务请求中都必须包含此令牌。
可通过以下 Python 函数请求令牌。 门户的 URL、用户名和密码将作为参数提供。
def generateToken(username, password, portalUrl):
'''Retrieves a token to be used with API requests.'''
parameters = urllib.urlencode({'username' : username,
'password' : password,
'client' : 'referer',
'referer': portalUrl,
'expiration': 60,
'f' : 'json'})
response = urllib.urlopen(portalUrl + '/sharing/rest/generateToken?',
parameters).read()
try:
jsonResponse = json.loads(response)
if 'token' in jsonResponse:
return jsonResponse['token']
elif 'error' in jsonResponse:
print jsonResponse['error']['message']
for detail in jsonResponse['error']['details']:
print detail
except ValueError, e:
print 'An unspecified error occurred.'
print e
令牌不会永远有效;它具有超时设计,以防被恶意用户偷窃并无限期使用。 通常,每次运行脚本时(但并非每次进行请求时),必须请求一个新令牌。 在一些异常情况下,令牌会在执行脚本结束前过期。 如果您的请求包含了过期令牌,来自服务器的响应将包含一条表明令牌已过期的错误消息。 如果发生这种情况,请刷新令牌并继续执行脚本。
使用请求和响应
要进行 Web 服务请求,需要格式化要进行的操作的 URL 以及该操作所需的参数。 与上文所生成令牌类似的令牌是受保护门户需要的一个参数。
所有管理操作都会生成一个 web 服务响应,通常以“JavaScript 对象标记法”(JSON) 格式请求。 脚本语言(例如 Python)具有可以解析或读取 JSON 响应的库。 有时,只需要获取 HTTP 状态代码来查看请求是否成功(例如,代码 200 表示正常)。 但在其他时候,响应可能包含您希望进一步解析和检查的数据(如日志消息)。
要了解如何以编程方式向 Portal for ArcGIS 发送请求以及如何处理响应,请参阅本帮助手册中的多个代码示例。