Docs 菜单

Docs 主页MongoDB Cloud Manager

公共 API原则

在此页面上

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

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

与通过 Web 界面进行的更改一样,通过 API 进行的更改也需遵守 Cloud Manager定价。 如果您添加服务器并产生费用,则必须在 Cloud Manager 文件一张有效的信用卡,否则帐户可能会被锁定。

API 具有以下功能:

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

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

例子

API 网络访问列表

Cloud Manager API可以通过API 访问列表保护对 Cloud Manager Administration API 的访问。此列表将对API的访问限制为特定的IPCIDR地址。 每个API密钥都有自己的 Cloud Manager Administration API 访问列表。 当您使用Cloud Manager用户界面创建新的组织时,MongoDB Atlas默认启用API访问列表要求。

要了解更多信息,请参阅(可选)需要组织的 API 访问列表。

仅限HTTPS
您只能通过 HTTPS 访问 API ,这可确保通过网络发送的所有数据均使用 TLS 完全加密。

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

方法
用途
GET
检索资源的 JSON 表示形式。
POST
使用提供的 JSON 表示形式创建新资源。
PUT
将资源替换为提供的 JSON 表示形式。
PATCH
使用提供的 JSON 表示形式更新资源中的指定字段。
DELETE
删除资源。
HEAD
检索不带资源的JSON表示形式的响应标头。

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

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

将日期发送到服务器时(作为查询参数或POSTPATCH 请求实体中的字段),请使用根据 ISO8601 标准。如果您不指定时区,Cloud 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 }
拒绝无效字段

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

例子

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

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

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

例子

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

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

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

例子

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

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

例子

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

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

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

例子

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

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

字段
定义
rel
关系的名称(或类型)。 其中许多被视为扩展关系类型,并以http://mms.mongodb.com为前缀。
href
目标URL

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

例子

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

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

要了解更多信息,请参阅 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字段添加到现有信封。

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

curl --user '{USERNAME}:{APIKEY}' --digest \
--header 'Accept: application/json' \
--include \
--request GET "https://cloud.mongodb.com/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
各种服务器错误
出现意外问题。 请稍后重试,并考虑通知 Cloud Manager 经理。

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

字段
数据类型
定义
detail
字符串
API请求错误的人类可读描述。
error
整型
errorCode
字符串
表示API请求错误的命名常量,如Cloud Manager 管理 API 错误代码中所示。
parameters
字符串数组
API请求中传递的参数列表。
reason
字符串

例子

对于格式不正确的请求,Cloud 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}

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

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

请记住以下几点:

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

  • 将摘要式身份验证与HTTPS结合使用,可确保密码永远不会传回服务器,从而提供额外的安全层。

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

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

    例子

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

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

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

    对于这些资源,与API密钥绑定的用户必须是项目成员。 否则,Cloud Manager 将使用HTTP 401 错误进行响应。

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

重要

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

某些资源受到速率限制。

对于受到速率限制的资源,Cloud Manager 允许每个项目每分钟最多 100 个请求。 请记住,公共API密钥会分配给 Cloud Manager 用户,但该用户可以访问多个项目。

例子

考虑两个用户:A 和 B。

用户 A 属于项目 X,用户 B 属于项目 X 和 Y。

  1. 下午 1:00:00,用户 A 向项目 X 中的速率受限资源发出 50 个请求,所有请求均在下午 1:00:20 之前完成。

  2. 下午 1:00:30,用户 B 尝试向项目 X 中的速率受限资源发出 60 个请求。

    由于用户 A 在下午 1:00 已用完项目 X 的 50 个请求,因此已拒绝用户 B 尝试发出的最后 10 个请求。 然而,用户 B 可以向项目 Y 中的速率受限资源发出请求,因为每个项目都有一个单独的请求计数器。

  3. 下午 1:01,可以继续向项目 X 发出请求,因为用于速率限制的请求计数器每分钟都会重置。

如果超过速率限制, API将返回HTTP 429 Too Many Requests响应代码。

有关 Cloud Manager 公共 API 中提供的所有资源的完整参考,请参阅 Cloud Manager Administration API 资源 。

← API