Docs 菜单
Docs 主页
/
MongoDB Ops Manager
/

公共 API原则

在此页面上

  • HTTP 方法
  • JSON
  • 链接
  • 列表
  • 信封
  • 美观打印
  • 响应代码
  • Errors
  • 身份验证
  • 自动化
  • 更多信息

Ops Manager 公共API遵循REST架构原则来公开内部资源,从而提供对 Ops Manager 功能的编程访问。

API 具有以下功能:

JSON 实体
所有实体都以 JSON 表示。
基于密钥的访问
每个需要连接到MongoDB Ops Manager 的 用户或应用程序都必须在访问MongoDB Ops Manager 之前 生成API 密钥MongoDB Ops ManagerAPI
摘要式身份验证
为确保您的 公共 API 密钥 永远不会通过网络发送, API 请求使用 HTTP 摘要式身份验证进行身份验证。
可浏览界面
使用一致的链接机制,您可以从根资源开始,然后通过相关资源的链接来浏览整个 API。
用户访问控制

每个 Ops Manager 用户的API功能与其Ops Manager 角色授予的权限相匹配。

例子

API 网络访问列表
MongoDB Ops Manager API支持每用户API访问列表,用于将API访问权限限制为特定的IPCIDR地址。 MongoDB Ops Manager对于具有非空API 访问权限列表的 用户,所有API 访问权限都必须源自访问权限列表中的IP 解决。空 API 访问权限列表允许从任何 IP 解决访问权限所有 API 端点,但明确需要访问权限列表中的解决的端点除外。

所有资源都支持这些常用 HTTP 方法的子集:

方法
用途

GET

检索资源的 JSON 表示形式。

POST

使用提供的 JSON 表示形式创建新资源。

PUT

将资源替换为提供的 JSON 表示形式。

PATCH

使用提供的 JSON 表示形式更新资源中的指定字段。

DELETE

删除资源。

HEAD

检索不带资源的JSON表示形式的响应标头。

所有实体均以JSON表示。 以下请求规则和响应约定适用:

应用正确的内容类型标头
通过POSTPUT向服务器发送JSON时,请确保指定正确的内容类型请求标头: Content-Type: application/json
将日期设置为 ISO8601 字符串

将日期发送到服务器时(作为查询参数或POSTPATCH 请求实体中的字段),请使用根据 ISO8601 标准。如果您不指定时区, MongoDB Ops Manager将采用UTC 。 包括时区标识符以避免任何歧义。

例子

  • 2018 年 9 月 27 日表示为2018-09-27

  • 2018 年 9 月 27 日下午 4:00 EDT 用2018-09-27T16:00-04:00表示(带区域)。

在某些情况下,时间戳会以 BSON 时间戳 JSON 表示形式返回 ,尤其是在备份资源方面。这种BSON时间戳表示将JSON文档作为具有两个字段的对象提供:

字段
定义

date

自 UNIX 纪元以来的秒数

increment

给定秒内操作的递增 32 位整数序数。

例子

第三次操作(美国东部区域 2018 年 9 月 27 日下午 4:00)表示为(带区域)为

{ date: 2018-09-27T16:00-04:00, increment: 3 }
拒绝无效字段

无效字段会被拒绝,而不是被忽略

例子

您尝试创建新实体并拼错其中一个字段,或者尝试更新现有实体并包含无法修改的字段,则 Ops Manager 会使用HTTP 400 状态代码进行响应,并显示一条错误消息,说明哪个字段被修改。无效。

ISO 格式返回日期8601 字符串
所有日期均以 ISO8601 格式 返回 - 以 UTC 格式指定的字符串。
用于消除单位歧义的标签字段

包含特定单位数值的字段经过命名,以消除所使用单位的歧义。

例子

主机的正常运行时间以毫秒为单位返回,因此主机实体字段的名称是uptimeMsec

返回没有其他值的字段的默认值

没有当前值的字段将返回适当的默认值。

例子

Ops Manager 没有新发现主机的任何统计信息,因此所有与统计信息相关的字段的值均为零。

将从实体中省略没有合理默认值的字段。

例子

未使用身份验证的主机会省略返回实体中的username字段。

按字母顺序返回字段
Ops Manager 应用程序返回的JSON文档中的字段按字母顺序排列。订单可能会发生变化。 不要依赖字段的顺序。

每个资源包括一个或多个指向子资源的链接和/或相关资源。

例子

主机具有指向其所属项目、副本集等的链接。

链接放置在实体的links字段中,该实体是链接关系对象的数组。 每个链接关系都有两个字段:

字段
定义

rel

关系的名称(或类型)。 其中许多被视为扩展关系类型,并以http://mms.mongodb.com为前缀。

href

目标URL

所有实体都至少包含一个名为self的链接关系,即实体自己的URL 。 当实体是列表的一部分时(即,请求项目中的所有主机时),它仅包含self链接关系。

例子

这是包含一些链接的host资源的一部分:

1{
2 "rel": "http://mms.mongodb.com/project",
3 "href": "https://cloud.mongodb.com/api/public/v1.0/projects/xxx"
4 "id": "xxx",
5 "projectId": "yyy",
6 "hostname": "mongodb.example.com",
7 "port": 27017,
8 "links": [
9 {
10 "rel": "self",
11 "href": "https://<ops-manager-host>/api/public/v1.0/projects/xxx/hosts/yyy"
12 },
13 {
14 "rel": "http://mms.mongodb.com/project",
15 "href": "https://<ops-manager-host>/api/public/v1.0/projects/xxx"
16 }
17 ]
18}

要了解更多信息,请参阅 Web 链接规范

注意

虽然 Web 链接规范 描述了一种在 HTTP 响应标头中包含链接的格式,但它不是必需的。为了使API易于浏览,它将链接包含在响应正文中,而不是在响应标头中。

某些资源会返回实体列表。

例子

您可以请求项目中所有主机的列表。

当响应中需要实体列表时,结果将在两个查询参数的限制下批处理返回:

字段
定义

pageNum

页码(从 1 开始)。 如果未指定,则默认为 1。

itemsPerPage

每页要返回的项目数,最多 500 个。 如果未指定,则默认为 100。

响应实体包含三个字段:

字段
定义

totalCount

整个结果集中的项目总数。

示例,如果一个项目共有57台主机,而您使用pageNum=6itemsPerPage=10请求,则totalCount57

results

结果集,即实体文档的数组。

links

包含一到三个链接关系:

  • previous 上一页结果(第一页省略);

  • next 下一页结果(最后一页省略);

  • self 用于当前页面(始终存在)。

If you make a request for a list of entities and there are no results, then the API responds with an HTTP 200 status code and an empty results array. 在这种情情况下,它不会以 404 进行响应,因为实体列表在将来的某个点可能不为空。

如果您在不存在的上下文中请求实体列表(即不存在的项目的主机列表),则会导致HTTP 404 响应状态。

例子

这是一个共有 57 台主机的项目中第二页(有 10 台主机)的HTTP响应:

1{
2
3 "totalCount": 57,
4 "results": [
5 {
6 "id": "yyy",
7 "projectId": "xxx",
8 // additional host properties...
9 },
10 // additional host documents...
11 ],
12 "links": [
13 {
14 "rel" : "self",
15 "href" : "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?pageNum=2&itemsPerPage=10"
16 },
17 {
18 "rel": "previous",
19 "href": "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?itemsPerPage=10&pageNum=1"
20 },
21 {
22 "rel": "next",
23 "href": "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?itemsPerPage=10&pageNum=3"
24 }
25 ]
26}

某些客户端可能无法访问HTTP响应标头和/或状态代码。 在这种情况下,您可以请求响应包含envelope ,它只是JSON文档中的额外信息层,其中包含通常位于响应标头中的任何相关详细信息。

默认情况下, API不会将响应包含在信封中。 要请求一个,只需添加查询参数envelope=true即可。

对于包含单个实体的响应,信封包含两个字段:

字段
定义

status

HTTP状态代码。

content

请求的实体。

对于包含实体列表的响应,已经有一个封装结果的信封,因此在这种情况下指定envelope=true作为查询参数只会将status字段添加到现有信封。

默认情况下,Ops Manager 返回的JSON中的多余空格会被去掉。要请求美观打印的JSON ,只需将pretty=true查询参数附加到任何请求:

curl --user '{USERNAME}:{APIKEY}' --digest \
--header 'Accept: application/json' \
--include \
--request GET "{opsManagerHost}:{Port}/api/public/v1.0?pretty=true"

注意

为清楚起见,本文档中的所有示例都显示了美观打印的JSON ,尽管某些示例URL可能不包含这个额外的查询参数

响应利用标准HTTP响应代码,包括:

代码
含义
注意

200

正常

请求成功。 这是对成功的GET请求的典型响应。

201

已创建

已创建新资源。 这是对成功的POST请求的典型响应。

202

已接受

已接受异步操作请求。

400

Bad Request

客户端请求出现问题。

401

Unauthorized

需要进行身份验证,但请求中未提供身份验证。 通常,这意味着请求中省略了摘要式身份验证信息、提供的档案不正确或不允许与给定API密钥关联的用户访问所请求的资源。

403

Forbidden

不允许访问指定的资源。

404

未找到

请求的资源不存在。

405

不允许的方法

指定资源不支持 HTTP 方法。请记住,每个资源可能仅支持 HTTP 方法的子集。

示例,您不能DELETE资源。

409

冲突

这通常是对创建或修改实体属性的请求的响应,当已经存在具有相同属性值的现有实体时,该属性是唯一的。

示例,如果您尝试项目与现有项目,则请求将失败。

5xx

各种服务器错误

出现意外问题。 请稍后重试,并考虑通知 Ops Manager 支持。

当请求导致错误时,响应正文会包含一个JSON文档,其中包含有关错误原因的其他详细信息。 该文档包含五个字段:

字段
数据类型
定义

detail

字符串

API请求错误的人类可读描述。

error

整型

errorCode

字符串

表示API请求错误的命名常量,如Ops Manager 管理 API 错误代码中所示。

parameters

字符串数组

API请求中传递的参数列表。

reason

字符串

例子

Ops Manager 会为格式不正确的请求返回此响应正文:

1{
2 "detail" : "Cannot find resource /api/public/v1.0/softwareComponents/version.",
3 "error" : 404,
4 "errorCode" : "RESOURCE_NOT_FOUND",
5 "parameters" : [ "/api/public/v1.0/softwareComponents/version" ],
6 "reason" : "Not Found"
7}

要查看代码列表,请参阅Ops Manager Administration API 错误代码。

如前所述, MongoDB Ops Manager API使用HTTP摘要式身份验证。 摘要式身份验证的详细信息超出了本文档的范围,但它本质上需要用户名和密码,使用服务器生成的唯一值(称为随机数)对这两个用户名和密码进行哈希处理。 用户名是注册的MongoDB Ops Manager帐户的用户名,密码是与该帐户关联的公共API密钥

请记住以下几点:

  • 客户端使用服务器生成的随机数对用户名和密码进行哈希处理,然后将其发送回服务器以对请求进行身份验证。 根据摘要式身份验证规范,该随机数仅在短时间内有效。 这是为了防止重放攻击,因此您无法缓存随机数并永久使用它。

  • 某些资源方法需要更高的安全性,并且还受到访问列表的额外保护,该列表只允许从列出的IP地址访问资源。 每个用户都配置自己的IP地址访问列表,允许访问资源。

  • Ops Manager 应用程序有一个角色的概念,它允许对允许用户执行的操作进行更细粒度的控制。 API资源也执行相同的授权规则,因此可以通过API密钥访问的资源和方法由授予关联用户的角色控制。

    例子

    对于DELETE主机,拥有用于发出请求的API密钥的用户必须是主机所属项目中的Project Monitoring AdminProject Owner

  • 许多资源都与项目(以前称为群组)绑定,以下形式的URL即可证明:

    /api/public/v1.0/groups/{PROJECT-ID}/

    对于这些资源,与API密钥绑定的用户必须是项目成员,或者必须被分配到GLOBAL角色之一。 否则,Ops Manager 应用程序将使用HTTP 401 错误进行响应。

自动化配置资源获取最新计划的自动化状态资源提供的端点允许您修改项目的部署和检索部署状态。 您可以通过向 Ops Manager 发送新的自动化配置来修改部署。 您可以在自动化配置中描述和配置要部署的 MongoDB 进程。 Ops Manager 将此称为部署的“目标状态”。当您通过API提交新的自动化配置时,自动化会调整系统的当前状态以匹配目标状态。

重要

API中没有任何保护措施来防止并发修改。 如果两个管理员都从基于当前版本的配置开始,进行各自的修改,然后提交各自的修改,则以后来修改者为准。

有关 Ops Manager 公共 API 中可用资源的完整参考,请参阅 Ops Manager 管理 API 资源 。

后退

API