使用Curl调用MongoDB Atlas API创建customRoles失败求助
排查MongoDB Atlas自定义角色创建的Curl请求问题
针对你遇到的三个错误,逐个拆解原因和解决办法:
1. 415 "Unsupported Media Type"
这个错误原因很明确:Atlas自定义角色创建API仅接受JSON格式的请求体,你最初的POST请求未添加Content-Type: application/json头,服务器无法识别请求体格式,因此返回415。解决方式就是在请求头中必须包含该字段。
2. 406 "INVALID_VERSION_DATE"
MongoDB Atlas API有严格的版本要求,所有请求必须指定API版本日期。仅添加Content-Type头不足以满足要求,需通过Accept头明确指定版本(推荐方式),或在Content-Type头中附带版本参数。例如:
- 正确的
Accept头格式:Accept: application/json;version=2023-10-01(版本号选择官方文档中的最新稳定版本即可)
3. 400 "MALFORMED_JSON"
该错误说明你的请求体JSON不符合Atlas API的格式规范,常见问题包括:
- 字段拼写错误:比如将必填字段
roleName写成小写rolename,或databaseName拼写失误 - 缺少必填字段:自定义角色必须包含
roleName、databaseName、actions数组这三个核心字段 - JSON语法错误:比如引号不匹配、数组/对象末尾多写逗号、括号未闭合
actions数组格式错误:每个动作对象必须包含action(如find、insert等权限动作)和resource(指定权限作用的库/集合),resource中的db和collection不可省略(集合为空字符串表示作用于整个数据库)
正确的Curl请求示例
curl --request POST 'https://cloud.mongodb.com/api/atlas/v1.0/groups/你的项目ID/customRoles' \ --header 'Accept: application/json;version=2023-10-01' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer 你的API密钥' \ --data-raw '{ "roleName": "自定义角色名", "databaseName": "目标数据库名", "actions": [ { "action": "find", "resource": { "db": "目标数据库名", "collection": "" } }, { "action": "insert", "resource": { "db": "目标数据库名", "collection": "指定集合名" } } ] }'
你可以将自己的请求体与上述示例对比,检查语法和字段是否符合要求,也可使用在线JSON校验工具先验证请求体的语法正确性。
内容的提问来源于stack exchange,提问作者newbietostack
相关产品推荐
相关产品推荐

