REST:检索用户可以访问的所有数据库的列表(不一致?)

时间:2016-07-08 16:30:41

标签: rest arangodb

该文档指出可以使用以下代码检索用户可以访问的所有数据库的列表:http://localhost:8529/_api/database/user。 然而,当我尝试时,这给了我一个401.

此外,图形界面中的Swagger文档,当我点击'试一试'它使用以下网址:http://localhost:8529/_db/test_db_2/_api/database/user

我发现它很奇怪,因为它包含数据库的名称:test_db_2

有没有办法查询用户可以访问的所有数据库而不知道他们的名字?

1 个答案:

答案 0 :(得分:4)

我想我们在这里有几件事。

首先:ArangoDB 3.0默认启用身份验证。这意味着您必须为任何http请求提供身份验证标头。如果您在浏览器中或通过curl打开该URL,则可能会失败。使用curl时,您可以通过--user参数指定用户名/密码。如果省略身份验证,服务器将始终发送401 http响应。

现在您的用例:可以通过以下方式获取每个用户允许的数据库:

curl -v --user root:8bYikSrSC2ue5zlw 172.17.0.2:8529/_api/user/testuser/database

这是我机器上正在运行的docker实例的完整示例。将testuser替换为您想要的用户,替换主机/端口和用户名/密码。请注意" / database"是静态的。通过提供这一点,您告诉ArangoDB提供用户有权访问的数据库列表。示例结果:

{"result":{"test":"rw","test2":"rw"},"error":false,"code":200}

最后,ArangoDB在每个数据库级别提供REST API。通过指定/ _db / test_db_2,您将访问数据库test_db_2中的REST API。在没有指定数据库(直接访问/ _api / something)的情况下,您无意中要求ArangoDB在内部_system数据库中运行。您可能在登录ArangoDB时选择了数据库test_db_2,因此UI中的API链接指向该数据库。

/ user API有点特殊,因为用户是全局的,因此您指定的数据库并不重要。