文档数据库服务

构造请求

2025-06-27 02:03:25
  • 本章节 https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources 返回非200

  • 本章节 https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources 返回非200

  • 本章节 API调试 https://eop.ctyun.cn/ebp/searchCtapi/ctapiDebugCenter 返回非200

构造请求

本节介绍REST API请求的组成,以调用云主机产品的"根据regionID查询用户资源"举例说明如何调用该API。

请求示例

POST https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources?prodInstId=11&startTime=2021-04-04T06:01:46ZHTTP/1.1
Content-Type:application/json
ctyun-eop-request-id:0ffb9b07-d5a8-4e19-b3ce-12dfb9705a1d
Eop-Authorization:4a4bdc57e06542199b5f98d4cd107be2 Headers=ctyun-eop-request-id;eop-date Signature=b2WEo4nh9ewn6SWOP0ii5g8L0z9CT5gprpDWntlCX9I=
Eop-date:20221107T093029Z

请求URI

{URI-scheme}://{Endpoint}/{resource-path}?{query-string}

参数

描述

URI-scheme

表示用于传输请求的协议,当前所有API均采用HTTPS协议

Endpoint

指定承载REST服务端点的服务器域名或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点获取。例如云主机产品服务在某个区域的Endpoint为“ctecs-xxx.ctapi.ctyun.cn”

resource-path

资源路径,即API访问路径。从具体API的URI模块获取,例如"根据regionID查询用户资源"API的resource-path为“/v4/region/customerResources”

query-string

查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“?limit=10”,表示查询不超过10条数据

示例:

云主机-根据regionID查询用户资源,则需使用云主机产品在对应区域的Endpoint(ctecs-xxx.ctapi.ctyun.cn),并在"根据regionID查询用户资源"的URI部分找到resource-path(/v4/region/customerResources),拼接起来如下所示。

https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources

说明: 为方便查看,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。

**{resource-path}**资源路径,使用编码的规范URI示例:

前:
/v4/region/customerResources api/code
后:
/v4/region/customerResources%20api/cod

说明:

资源路径{resource-path}是从HTTP Host结束到查询字符串参数(如果有)的问号字符(“?”)中间的部分。 需要根据RFC 3986标准化URI路径规范移除冗余和相对路径部分。路径中每个部分都必须进行URI编码。

**{query-string}**查询参数,使用规范查询字符串示例:

前:
prodInstId=11&startTime=2021-04-04T06:01:46Z
后:
prodInstId=11&startTime=2021-04-04T06%3A01%3A46Z

说明:

{query-string}为键值对,使用等号字符(=)拼接。值需进行URI编码,同样需要满足RFC 3986关于URL编码规范的定义要求。键则不需要。对没有值的参数使用空字符串。

在每个参数值后追加与字符(&),列表中最后一个值除外。

使用 %XY 对所有其他字符进行百分比编码,其中“X”和“Y”为十六进制字符(0-9和大写字母A-F)。例如,空格字符必须编码为 %20(不像某些编码方案那样使用“+”),扩展UTF-8字符必须采用格式 %XY%ZA%BC。

RFC 3986规范的具体要求:

字符A-Z、a-z、0-9 以及字符-、_、.、不编码。

对其它ASCII码字符进行编码。编码格式为%加上16进制的ASCII码。例如半角双引号(")将被编码为%22。空格编码成%20,而不是加号(+)。

ASCII码通过UTF-8编码。

请求方法

方法

说明

GET

请求服务器返回指定资源

PUT

请求服务器更新指定资源

POST

请求服务器新增资源或执行特殊操作

DELETE

请求服务器删除指定资源,如删除对象等

HEAD

请求服务器资源头部

PATCH

请求服务器更新资源的部分内容

当资源不存在的时候,PATCH可能会去创建一个新的资源。

"根据regionID查询用户资源"的URI部分,您可以看到其请求方法为“POST”,则其请求为:

POST https://ctecs-xxx.ctapi.ctyun.cn/v4/region/customerResources

请求消息头

名称

描述

是否必选

示例

Content-Type

消息体的类型

application/json

ctyun-eop-request-id

流水号

0ffb9b07-d5a8-4e19-b3ce-12dfb9705a1d

Eop-Authorization

签名认证信息

4a4bdc57e06542199b5f98d4cd107be2 Headers=ctyun-eop-request-id;eop-date Signature=b2WEo4nh9ewn6SWOP0ii5g8L0z9CT5gprpDWntlCX9I=

Eop-date

时间,15分钟有效期(实际传时间为北京东八区UTC+8时间。TZ仅为格式,非UTC时间。)

20221107T093029Z

Content-Type

消息体的类型



ctyun-eop-request-id

流水号



Eop-Authorization

签名认证信息



Eop-date

时间,15分钟有效期(实际传时间为北京东八区UTC+8时间。TZ仅为格式,非UTC时间。)



Eop-Authorization签名认证信息:

步骤一:构造代签字符串sigture

sigture=需要进行签名的Header排序后的组合列表+"\n"+encode的query+"\n"+toHex(sha256(原封的body))

名称

描述

需要进行签名的Header排序后的组合列表

ctyun-eop-request-id、eop-date以 “header_name:header_value”的形式、以“\n”作为每个header的结尾符、以英文字母表作为header_name的排序依据将它们拼接起来。注意:EOP强制要求ctyun-eop-request-id、eop-date必须进行签名。其他字段是否需要签名看自身需求。例子(假设你需要将ctyun-eop-request-id、eop-date、host都要签名):ctyun-eop-request-id:123456789\neop-date:20210531T100101Z\n

encode的query

uery以&作为拼接,key和value以=连接,值需要encode,Query参数全部都需要进行签名

toHex(sha256(原封的body))

传进来的body参数进行sha256摘要,对摘要出来的结果转十六进制

sigture示例1(假设query为空、需要进行签名的Header排序后的组合列表为“ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\neop-date:20220525T160752Z\n**”、body参数做sha256摘要后转十六进制为e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855): ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\neop-date:20220525T160752Z\n\n\n**e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

sigture示例2(假设query不为空、需要进行签名的Header排序后的组合列表为“ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\neop-date:20220525T160752Z\n**”、body参数做sha256摘要后转十六进制为e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855): ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\neop-date:20220525T160930Z\n\n**aa=1&bb=2**\n**e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

步骤二:构造动态秘钥kdate

1.使用eop-date作为数据,sk作为密钥,算出ktime。

2.使用ak作为数据,ktime作为密钥,算出kAk。

3.使用eop-date的年月日值作为数据,kAk作为密钥,算出kdate。

名称

描述

eop-date

yyyyMMdd'T'HHmmss'Z'(20211221T163614Z)(年月日T时分秒Z)(实际传时间为北京东八区UTC+8时间,TZ仅为格式,非UTC时间)

ktime

使用eop-date作为数据,sk作为密钥,算出ktime。ktime=hmacSHA256(eop-date,sk)

kAk

使用ak作为数据,ktime作为密钥,算出kAk。kAk=hmacSHA256(ak,ktime)

kdate

使用eop-date的年月日值作为数据,kAk作为密钥,算出kdate

步骤三:构造signature

使用kdate作为密钥、sigture作为数据,将其得到的结果进行base64编码得出signature

名称

描述

Signature

hmacSHA256(sigture,kdate)将上一步的结果进行base64加密得出signature

步骤四:构造Eop-Authorization

1.构造Headers。

2.得到Eop-Authorization。

Eop-Authorization:ak Headers=xxx Signature=xxx。

名称

描述

Headers

将需要进行签名的请求头字段以 “header_name”的形式、以“;”作为间隔符、以英文字母表作为header_name的排序依据将它们拼接起来。例子(假设你需要将ctyun-eop-request-id、eop-date都要签名):Headers=ctyun-eop-request-id;eop-date

Eop-Authorization

Eop-Authorization:ak Headers=xxx Signature=xxx。注意,ak、Headers、Signature之间**以空格隔开**。例如:Eop-Authorization:ak Headers=ctyun-eop-request-id;eop-date Signature=NlMHOhk5bVfZ9MwDSSJydcZjjENmDtpNYigJGVb。注意:如果你需要进行签名的Header不止默认的ctyun-eop-request-id和eop-date,那么你需要在http_client的请求头部中加上,并且Eop-Authorization中也需要增加

温馨提示:

API可进入API调试页面,进行在线调试。


myqhY4K1sDRY