调用说明
请求结构
请求结构简介
1. API 服务域名
各地域对应的域名地址:
Region | EndPoint | Protocol |
---|---|---|
北京 | dbsc.bj.baidubce.com | HTTP and HTTPS |
保定 | dbsc.bd.baidubce.com | HTTP and HTTPS |
阳泉 | dbsc.yq.baidubce.com | HTTP and HTTPS |
成都 | dbsc.cd.baidubce.com | HTTP and HTTPS |
南京 | dbsc.nj.baidubce.com | HTTP and HTTPS |
广州 | dbsc.gz.baidubce.com | HTTP and HTTPS |
苏州 | dbsc.sz.baidubce.com | HTTP and HTTPS |
武汉 | dbsc.wh.baidubce.com | HTTP and HTTPS |
上海 | dbsc.sh.baidubce.com | HTTP and HTTPS |
香港 | dbsc.xg.baidubce.com | HTTP and HTTPS |
2. 通信协议
API 调用遵循 HTTP 协议,各 Region 采用不同的域名,具体域名为 dbsc.{region}.baidubce.com。
3. 请求参数
百度智能云 API 的每个请求都需要指定两类参数:即公共请求参数以及接口请求参数。其中公共请求参数是每个接口都要用到的请求参数,而接口请求参数是各个接口所特有的,具体见各个接口的“请求参数”描述。
请求参数包括如下4种:
参数类型 | 参数说明 |
---|---|
URI | 通常用于指明操作实体,如:POST /v{version}/instance/{instanceId} |
Query参数 | URL中携带的请求参数 |
HEADER | 通过HTTP头域传入,如:x-bce-date |
RequestBody | 通过JSON格式组织的请求数据体 |
4. API 版本号
参数 | 类型 | 参数位置 | 描述 | 是否必须 |
---|---|---|---|---|
version | String | URL参数 | API 版本号,当前API 版本为 v1 | 是 |
5. 字符编码
可解析内容,所有 request/response body 内容目前均使用 UTF-8 编码,后续会支持更多 encoding 类型。
公共头
公共请求头
参数名称 | 描述 |
---|---|
Authorization | 包含Access Key与请求签名,生成签名请参考签名认证 |
Content-Type | application/json; charset=utf-8。 |
x-bce-date | 表示日期的字符串,符合 API 规范。 |
Host | 表示请求 API 的域名。 |
x-bce-content-sha256 | 表示内容部分的SHA256签名的十六进制字符串。 这里内容指HTTP Request Payload Body。 即 Content 部分在被 HTTP encode之前的原始数据。 |
HTTP协议的标准头域不再这里列出。公共头域将在每个云数据库 RDS API 中出现,是必需的头域,其中x-bce-content-sha256头域只出现在POST和PUT请求中。POST、PUT、DELETE等请求数据放在request body中。
公共响应头
参数名称 | 描述 |
---|---|
Content-Type | application/json; charset=utf-8。 |
x-bce-request-id | DBSC 后端生成,并自动设置到响应头域中。 |
接口特殊请求参数说明
接口请求参数与具体的接口有关,不同的接口支持的接口请求参数也不一样。
接口中每个字段的说明如下:
字段 | 说明 |
---|---|
参数名称 | 该接口支持的请求参数名,用户可以在使用此接口时将其作为接口请求参数。 |
类型 | 此接口参数的数据类型。 |
是否必须 | 标志此参数是否是必须的,若为“是”;,则表明调用该接口必须传入此参数;若为“否”,表示可以不传入。 |
参数位置 | 此接口参数的所属位置。 |
描述 | 简要描述了此接口请求参数的内容。 |
最终请求形式
最终的请求由以下几部分组成:
- 请求域名: 如北京区域的域名为dbsc.bj.baidubce.com。
- 请求路径: 各个接口请求路径不同,详见具体接口详情。
- 请求方式: 支持RESTful风格的请求方式,本接口文档中涉及POST,GET,PUT,DELETE四种方式。
- 请求头: 包括鉴权信息在内的各个公共请求头。详细参考公共头。
- 最终请求参数串: 包括接口路径参数(请求路径中问号后面的部分)和接口请求参数。如创建只读实例的路径参数readReplica和接口请求参数clientToken={clientToken}。
- 请求body体:根据接口规定的RequestBody参数结构组成的json结构体。
示例:
POST /v1/diagnosis/redis/big-key/task HTTP/1.1
HOST: dbsc.bj.baidubce.com
Content-Type: application/json
x-bce-content-sha256: fc2af5fb07f6acdf3981dfe4f02d23a3585e93f618b81876abee98ed268cf
x-bce-date: 2018-02-06T08:33:37Z
Authorization: bce-auth-v1/f81d3b34e48048fbb2634dc7882d7e21/2017-11-21T04:17:29Z/3600/host/74c506f68c65e26c633bfa104c863fffac5190fdec1ec24b7c03eb5d67d2e1de
{
"appId":"scs-bj-mmolmekriqve",
"clusterId":"scs-bj-mmolmekriqve-0",
"backupType":1
}
返回结果
正确返回结果
云数据库 RDS 的API 服务要求使用JSON格式的结构体来描述一个请求返回的具体内容。作为示例,以下是一个正确的返回结果格式:
HTTP/1.1 200 OK
x-bce-request-id: 1214cca7-4ad5-451d-9215-71cb844c0a50
Date: Wed, 03 Dec 2014 06:42:19 GMT
Content-Type: application/json;charset=UTF-8
{
"id": 231683837451
}
错误返回结果
请求发生错误时通过respone body返回详细错误信息,遵循如下格式:
参数名 | 类型 | 说明 |
---|---|---|
code | String | 错误码 |
message | String | 错误描述 |
requestId | String | 本次请求的 requestId |
示例:
{
"requestId" : "ae2225f7-1c2e-427a-a1ad-5413b762957d",
"code" : "AccessDenied",
"message" : "Access denied."
}
错误返回码说明
错误码 | 错误描述 | HTTP状态码 | 中文解释 |
---|---|---|---|
ErrSuccess | OK | 200 | OK |
ErrUnknown | We encountered an internal error. Please try again. | 500 | 内部错误,请再试一次 |
ErrBind | Error occurred while binding the parameter to the struct. | 400 | 参数错误 |
ErrValidation | Validation failed. | 400 | 认证失败 |
ErrInvalidHTTPAuthHeader | The HTTP authorization header is invalid. Consult the service documentation for details. | 400 | 权限验证失败 |
ErrAuthentication | Authentication failed. Please contact the administrator to grant dsc related permissions. | 400 | 身份验证失败,请联系管理员授予此帐户DSC相关权限 |
ErrProductNotDefined | The product type is not supported currently. | 400 | 暂不支持的产品类型 |
ErrDBEngineNotDefined | The database engine type is not supported currently. | 400 | 暂不支持的数据库类型 |
ErrRegionNotDefined | The region is not supported currently. | 400 | 暂不支持的地域 |
ErrStoreTypeNotDefined | The storage type is not supported currently. | 400 | 暂不支持的存储类型 |
ErrDBSCAuthentication | DBSC Authentication failed. Please contact the administrator to grant related permissions. | 400 | 权限不足,请联系管理员授予相关权限 |
ErrDBSCUserStopped | The user is stopped. | 400 | 用户停用 |
ErrDatabase | Database error | 500 | 数据库错误 |
ErrGetLockError | Get record lock error | 400 | 获取数据锁失败 |
ErrAppAlreadyExist | The instance already exist. Do not add it again | 400 | 实例已存在,请勿重复录入 |
ErrAppNotExist | The instance not exist | 400 | 不存在的实例 |
ErrAppCannotGetInfo | Unable to get the instance information | 400 | 获取实例信息失败 |
ErrAppIsNotServing | The instance state is not serving | 400 | 实例状态不是serving |
ErrAppIsInvalid | The instance is not valid | 400 | 无效的实例 |
ErrAuditRuleAlreadyExist | The audit rule already exist | 400 | 审计规则已存在 |
ErrAuditRuleNotExist | The audit rule not exist | 400 | 不存在的审计规则 |
ErrAuditRuleCannotDelete | The audit rule cannot be deleted | 400 | 该审计规则不能删除 |
ErrAuditRuleCannotModify | The audit rule cannot be modified | 400 | 该审计规则不能修改 |
ErrAuditRuleCannotDeleteWithTemplate | The audit rule is still used by some strategy and cannot be deleted | 400 | 该审计规则仍被其他审计策略引用,不能删除 |
ErrAuditTemplateAlreadyExist | The audit strategy already exist | 400 | 审计策略已存在 |
ErrAuditTemplateNotExist | The audit strategy not exist | 400 | 不存在的审计策略 |
ErrAuditTemplateCannotDelete | The audit strategy cannot be deleted | 400 | 该审计策略不能删除 |
ErrAuditTemplateCannotModify | The audit strategy cannot be modified | 400 | 该审计策略不能修改 |
ErrAuditTemplateCannotModifyOnlyOneRule | The audit strategy must contain at least one audit rule | 400 | 审计策略至少要包含一条审计规则 |
ErrAuditTemplateCannotDeleteWithApp | The audit strategy is still used by some instance and cannot be deleted | 400 | 该审计策略仍关联着其他实例,不能删除 |
ErrAuditTemplateUnbindAppFail | The instance audit is open, cannot be unbound with the strategy | 400 | 请先关闭该实例的审计功能 |
ErrAuditFactorNotExist | The audit factor not exist | 400 | 不存在的审计因子 |
ErrAuditOpenFailUnbindTemplate | The instance is not associated with an audit strategy, cannot be open | 400 | 该实例未关联审计策略,无法开启审计功能 |
ErrAuditReportNotExist | The audit report not exist | 400 | 不存在的审计报表 |
ErrAuditReportDownload | Failed to download the audit report | 400 | 下载审计报表失败 |
ErrAuditReportGenerateFail | Failed to generate the audit report | 400 | 生成审计报表失败 |
ErrAuditReportInvaild | The audit report is invalid | 400 | 审计报表已失效 |
ErrAuditReportDoing | The audit report is being generated | 400 | 审计报表正在生成中 |
ErrAuditReportNameExist | The audit report name already exist | 400 | 审计报表名称已存在 |
ErrAgentParameterError | agent request parameter is invalid | 400 | 参数错误 |
ErrorBillingServiceNameError | The service name is invalid | 400 | 服务名称错误 |
ErrorBillingOrderNotExist | The order is exist | 400 | 订单不存在错误 |
ErrorBillingActionNotExist | The action is not valid | 400 | action不存在错误 |
ErrorBillingOrderException | The order status exception | 400 | 账单状态异常,无法重新导入实例 |
ErrorBigKeyTaskNotExistError | The big key task is not exist | 400 | 大key任务不存在 |
ErrorBigKeyTaskDeleteError | The big key task delete failed | 400 | 大key任务删除失败 |
ErrorGetBigKeyResultError | The big key result get failed | 400 | 大key任务结果获取失败 |
ErrorBigKeyTaskExist | The big key result exist | 400 | 大key任务已经存在 |
ErrorBigKeyTaskCreateExist | The big key result create failed | 400 | 大key任务创建失败 |
ErrorBigKeyTaskInvaild | The big key result invalid | 400 | 大key任务无效 |
ErrBigKeyTaskDoing | The big key task is being generated | 400 | 大key结果正在分析中 |
ErrBigKeyTaskDownload | Failed to download the big key result | 400 | 下载大key结果失败 |
ErrLogFileNotExist | The file not exist | 400 | 不存在的文件 |
ErrLogFileInvaild | The file is invalid | 400 | 文件已失效 |
ErrLogFileDoing | The file is being generated | 400 | 文件正在生成中 |
ErrLogFileDownload | Failed to download the file | 400 | 下载文件失败 |
ErrCreateLogExportTaskFail | Failed to create log export task | 400 | 创建日志导出任务失败 |
ErrCreateLogExportTaskNotMatchFile | There are no original logs matched | 400 | 没有匹配的原始日志 |
ErrCreateLogExportTaskDataTooLarge | The size of exported logs is too large | 400 | 导出日志预计超过50GB,请缩小导出时间范围 |
ErrLogExportTaskNotExist | The log export task not exist | 400 | 不存在的导出任务 |
ErrLogExportFileNotExist | The log export file not exist | 400 | 不存在的导出文件 |
ErrLogExportFileInvaild | The log export file is invalid | 400 | 导出文件已失效 |
ErrLogExportTaskDoing | The log export file is being generated | 400 | 任务正在执行中 |
ErrLogExportTaskFail | The log export task execute fail | 400 | 导出失败 |
ErrLogExportFileDownload | Failed to download the log export file | 400 | 下载导出文件失败 |
ErrLogExportDataNotFound | No data found that matches the conditions | 400 | 没有发现符合条件的日志 |
签名认证
云数据库 RDS API 会对每个访问的请求进行身份认证,以保障用户的安全。安全认证采用 Access Key 与请求签名机制。Access Key 由 Access Key ID 和 Secret Access Key 组成,均为字符串,由百度智能云官方颁发给用户。其中 Access Key ID 用于标识用户身份,Access Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。
对于每个HTTP请求,用户需要使用下文所描述的方式生成一个签名字符串,并将认证字符串放在HTTP请求的Authorization头域里。
签名字符串格式
bce-auth-v{version}/{accessKeyId}/{timestamp}/{expireTime}/{signedHeaders}/{signature}
签名申请步骤
关于AK/SK的获取,请参看获取AK/SK
签名生成算法
有关签名生成算法的具体介绍,请参看鉴权认证机制。
其他说明
密码加密传输规范定义
所有涉及密码的接口参数都需要加密,禁止明文传输。密码一律采用AES-128-ECB加密算法进行加密,用SK的前16位作为密钥,用PKCS5Padding算法进行长度补全。此外,加密后生成的二进制字节流需要转成十六进制,并以字符串的形式传到服务端。
加密过程可参考以下代码,以Python为例,进行说明:
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
"""
若引入包Cipher后提示不存在该包,则安装pycryptodome包
"""
def encrypt(secretkey, password):
"""Encrypt adminpass by AES-128-ECB/PKCS5Padding, the key is secretkey."""
pendding = 16 - len(password) % 16
password += chr(pendding) * (pendding)
return b2a_hex(AES.new(secretkey[:16], AES.MODE_ECB).encrypt(password))
def decrypt(secretkey, password):
"""Decrypt adminpass by AES-128-ECB/PKCS5Padding, the key is secretkey."""
decrypted = AES.new(secretkey[:16], AES.MODE_ECB).decrypt(a2b_hex(password))
pendding = ord(decrypted[len(decrypted) - 1])
return decrypted[:-pendding]
幂等性
当调用创建接口时如果遇到了请求超时或服务器内部错误,用户可能会尝试重发请求,这时用户通过 clientToken 参数避免创建出比预期要多的资源,即保证请求的幂等性。
幂等性基于 clientToken,clientToken 是一个长度不超过 64 位的 ASCII 字符串,通常放在 query string 里,如http://dbsc.bj.baidubce.com/v1/instance?clientToken=be31b98c-5e41-4838-9830-9be700de5a20。
如果用户使用同一个 clientToken 值调用创建接口,则服务端会返回相同的请求结果。因此用户在遇到错误进行重试的时候,可以通过提供相同的 clientToken 值,来确保只创建一个资源;如果用户提供了一个已经使用过的 clientToken,但其他请求参数(包括 queryString 和 requestBody)不同甚至 url Path 不同,则会返回 IdempotentParameterMismatch 的错误代码。
clientToken 的有效期为 24 小时,以服务端最后一次收到该 clientToken 为准。也就是说,如果客户端不断发送同一个 clientToken,那么该 clientToken 将长期有效。
日期与时间规范
日期与时间的表示有多种方式。为统一起见,除非是约定俗成或者有相应规范的,凡需要日期时间表示的地方一律采用UTC时间,遵循ISO 8601,并做以下约束:
- 表示日期一律采用YYYY-MM-DD方式,例如2014-06-01表示2014年6月1日
- 表示时间一律采用hh:mm:ss方式,并在最后加一个大写字母Z表示UTC时间。例如23:00:10Z表示UTC时间23点0分10秒。
- 凡涉及日期和时间合并表示时,在两者中间加大写字母T,例如2014-06-01T23:00:10Z表示UTC时间2014年6月1日23点0分10秒。
排版约定
排版格式 | 含义 |
---|---|
< > | 变量 |
[ ] | 可选项 |
{ } | 必选项 |
| | 互斥关系 |
等宽字体 Courier New | 屏幕输出 |