对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Public API Principles

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

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

API 具有以下功能:

JSON 实体
所有实体都以 JSON 表示。
可浏览界面
使用一致的链接机制,您可以从根资源开始,然后通过相关资源的链接来浏览整个 API。
用户访问控制

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

例子

无论是通过 Cloud Manager 用户界面还是API ,具有Project Read Only角色的用户都无法修改该项目中的任何资源。

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表示。 以下请求规则和响应约定适用:

应用正确的内容类型标头
When sending JSON to the server via POST or PUT, make sure to specify the correct content type request header: Content-Type: application/json
将日期设置为 ISO8601 字符串

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

例子

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

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

In some cases, a timestamp is returned as a JSON representation of a BSON timestamp, most notably in the backup resources. This representation of a BSON timestamp provides a JSON document as an object with two fields:

字段
定义

date

自 UNIX 纪元以来的秒数

increment

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

例子

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

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

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

例子

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

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

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

例子

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

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

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

例子

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

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

例子

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

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

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

例子

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

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

字段
定义

rel

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

href

目标URL

All entities include at least one link relation called self, which is simply its own URL. When an entity is part of a list (i.e., when requesting all hosts in a project), then it only includes the self link relation.

例子

这是包含一些链接的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 用于当前页面(始终存在)。

如果您请求实体列表但没有结果,则API将使用HTTP 200 状态代码和空 results大量进行响应。在这种情况下,它不会使用 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}

Some clients may not be able to access the HTTP response headers and/or status code. In that case, you can request that the response include an envelope, which is simply an extra layer of information in the JSON document that contains any relevant details that would normally be in the response headers.

By default, the API does not include the response in an envelope. To request one, simply add the query parameter envelope=true.

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

字段
定义

status

HTTP状态代码。

content

请求的实体。

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

By default, extraneous whitespace is stripped from the JSON that Cloud Manager returns. To ask for pretty-printed JSON, simply append the pretty=true query parameter to any request:

curl --user '{PUBLIC-KEY}:{PRIVATE-KEY}' --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 错误代码。

The Cloud Manager API uses one of two methods to authenticate requests: API keys or service accounts. This ensures that the keys and access tokens that serve as usernames and passwords are never sent over the network. For usage details, see Programmatic Access to Cloud Manager with a Service Account.

服务帐户
API 密钥

使用行业标准 OAuth.2 0协议和客户端档案流程向Cloud Manager进行身份验证的新方法。

Legacy method of authenticating to Cloud Manager that uses HTTP digest authentication.

服务帐户允许您管理权限和创建访问权限令牌。 服务帐户具有客户端ID和密钥,密钥可用作创建访问权限令牌的用户名和密码。 访问权限令牌允许您向Cloud Manager发出API请求。

API keys have two parts: a Public Key and a Private Key. These two parts serve the same function as a username and a password when you make API requests to Cloud Manager.

创建服务帐户后,您将使用其客户端ID和密钥生成访问权限令牌,以对API请求进行身份验证。根据 OAuth 2.0 规范,访问令牌的有效期仅为 1 小时(3600 秒)。访问权限令牌过期可以防止重放攻击,因为在重放攻击中,可以不受时间限制地使用泄露的访问权限令牌。

Cloud Manager使用称为 随机数 的唯一值对公钥和私钥进行哈希处理。根据HTTP摘要规范,该随机数仅在短时间内有效。这是为了防止重放攻击,因此您无法缓存随机数并永久使用它。

Cloud ManagerCloud Manager角色限制服务帐户可以使用其访问权限令牌执行的操作。您必须像向用户授予角色一样向服务帐户授予角色,以确保访问权限令牌可以调用API端点而不会出现错误。

Cloud Manager roles limit which operations API keys can perform. You must grant roles to API keys as you would for users to ensure the API keys can call API endpoints without errors.

Cloud Manager将许多资源绑定到一个项目。许多API资源URL都遵循 /api/public/v1.0/groups/<PROJECT-ID>/ 的格式。对于这些资源,服务帐户必须是托管项目的组织的成员。否则, Cloud Manager将返回 401 错误。

Cloud Manager将许多资源绑定到一个项目。许多API资源URL都遵循 /api/public/v1.0/groups/<PROJECT-ID>/ 的格式。对于这些资源, API密钥必须是托管项目的组织的成员。否则, Cloud Manager将返回 401 错误。

每个服务帐号仅属于一个组织,但您可以授予服务帐号访问权限,以访问该组织中任意数量的项目。

每个 API 密钥仅属于一个组织,但您可以授予多个 API 密钥访问权限,以访问该组织中任意数量的项目。

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

自动化配置资源获取最新计划的自动化状态资源提供的端点允许您修改项目的部署和检索部署状态。 您可以通过向 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 发出请求,因为用于速率限制的请求计数器每分钟都会重置。

If you exceed the rate limit, the API returns an HTTP 429 Too Many Requests response code.

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