Skip to content

REST API

以下几部分详细介绍osca Open API的定义。

通用请求头

请求URI

osca根据桶和对象及带的资源参数来确定具体的URI,当需要进行资源操作时,可以使用这个URI地址。

URI的一般格式为(方括号内为可选项):

protocol://domain[:port]/[bucket][/object][?param]

URI中的参数

参数描述是否必选
protocol请求使用的协议类型,如HTTP、HTTPS。必选
bucket请求使用的桶资源路径,在整个系统中唯一标识一个桶。可选
domain存放资源的服务器的域名或IP地址。必选
port请求使用的端口号。根据软件服务器的部署不同而不同。缺省时使用默认端口,各种传输协议都有默认的端口号,如HTTP的默认端口为80,HTTPS的默认端口为443。osca对象存储服务的HTTP方式访问端口为80,HTTPS方式访问端口为443。可选
object请求使用的对象资源路径。可选
param请求使用的桶和对象的具体资源,缺省默认为请求桶或对象自身资源。可选

请求方法

HTTP方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。

对象存储支持的REST请求方法

方法说明
GET请求服务器返回指定资源,如获取桶列表、下载对象等。
PUT请求服务器更新指定资源,如创建桶、上传对象等。
POST请求服务器新增资源或执行特殊操作,如初始化上传段任务、合并段等。
DELETE请求服务器删除指定资源,如删除对象等。
HEAD请求服务器返回指定资源的概要,如获取对象元数据等。
OPTIONS请求服务器检查是否具有某个资源的操作权限,需要桶配置CORS。

请求消息头

可选的附加请求头字段,如指定的URI和HTTP方法所要求的字段。

公共请求消息头

消息头名称描述是否必选
Authorization请求消息中可带的签名信息。类型:String 条件:匿名请求不需要带,其他请求必选。 默认值:无。有条件必选
Content-LengthRFC 2616中定义的消息(不包含消息头)长度。类型:String。 默认值:无。条件:PUT操作可选,加载XML的操作必须带。有条件必选
Content-Type资源内容的类型,例如:text/plain。类型:String。默认值:无。
X-Amz-Date请求发起端的日期和时间。例如:Wed, 27 Jun 2018 13:39:15 +0000。类型:String 默认值:无。条件:如果是匿名请求或者消息头中带了x-osca-date字段,则可以不带该字段,其他情况下必选。有条件必选
X-Amz-Content-Sha256请求正文的 SHA-256 散列值。这个散列值用于验证请求的内容完整性。类型:String。默认值:无。有条件必选
Host表明主机地址。如fgws3-ocloud.ihep.ac.cn。类型:String。默认值:无。

请求消息体(可选) 请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。若请求消息体中参数支持中文,则中文字符必须为UTF-8编码。

每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。

请求消息体(可选)

请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。若请求消息体中参数支持中文,则中文字符必须为UTF-8编码。

每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。

发起请求

共有两种方式可以基于已构建好的请求消息发起请求,分别为:

cURL cURL是一个命令行工具,用来执行各种URL操作和信息传输。cURL充当的是HTTP客户端,可以发送HTTP请求给服务端,并接收响应消息。cURL适用于接口调试。关于cURL详细信息请参见https://curl.haxx.se/。由于cURL无法计算签名,使用cURL时仅支持访问匿名的公共osca资源。

编码 通过编码调用接口,组装请求消息,并发送处理请求消息。可以使用SDK或自行编码实现。

通用响应头

请求发送以后,您会收到响应,包含状态码、响应消息头和消息体。

状态码

状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态,完整的状态码列表请参见状态码。

响应消息头

对应请求消息头,响应同样也有消息头,如“Content-type”。

公共响应消息头

消息头名称描述
Content-Length响应消息体的字节长度。类型:整数。默认值:无。
Content-Type响应消息体的内容类型。例如,application/json 或 text/html。默认值:无。
Server服务器软件的名称和版本信息。例如 JWanFS FGW Server 服务
Date响应生成的日期和时间。例如 Fri, 24 Nov 2023 08:09:04 GMT
X-Amz-Request-IdAmazon S3 生成的唯一请求标识符。类型:字符串。默认值:无。 例如 1700813344215040281
Accept-Ranges表示服务器是否支持范围请求的响应头。类型:字符串。默认值:无。 例如 bytes

响应消息体(可选)

响应消息体通常以结构化格式(如JSON或XML)返回,与响应消息头中Content-type对应,传递除响应消息头之外的内容。

错误码定义

调用接口出错后,将不会返回结果数据。调用方可根据每个接口对应的错误码来定位错误原因。 当调用出错时,HTTP请求返回一个3xx,4xx或5xx的HTTP状态码。返回的消息体中是具体的错误代码及错误信息。在调用方找不到错误原因时,可以联系华为云客服,并提供错误码,以便我们尽快帮您解决问题。

错误响应消息格式

当错误发生时,响应消息头中都会包含:

  • Content-Type: application/xml
  • 错误对应的3xx,4xx或5xx的HTTP状态码。 响应消息体中同样会包含对错误的描述信息。下面的错误响应消息体示例展示了所有REST错误响应中公共的元素。
text
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>访问被拒绝</Message>
<Resource>/20001-cbq</Resource>
<RequestId>1700819696586081391</RequestId>
</Error>

错误响应消息元素

消息头名称描述
Error错误响应消息体XML结构中描述错误信息的根节点元素 。
Code错误响应消息体XML中错误响应对应的HTTP消息返回码。
Message错误响应消息体XML中具体错误更全面的解释。
RequestId本次错误请求的请求ID,用于错误定位。
Resource该错误相关的桶或对象资源。

错误码说明

在向OSCA-OSS系统发出请求后,如果遇到错误,会在响应中包含响应的错误码描述错误信息。对象存储访问服务的错误码如下所示。

错误码

状态码错误码错误信息
400InvalidBucketName指定的存储桶无效。
400InvalidDigest您指定的Content-Md5无效。
400InvalidArgument参数max-uploads必须是介于0和2147483647之间的整数
400InvalidArgument参数maxKeys必须是介于0和2147483647之间的整数
400InvalidArgument参数max-parts必须是介于0和2147483647之间的整数
400InvalidArgument参数对象可以包含最多1000个键的列表
400InvalidArgument参数partNumberMarker必须是整数。
400InvalidPart找不到一个或多个指定部件。部件可能尚未上载,或者指定的实体标记可能与部件的实体标记不匹配。
400InvalidRequest此复制请求是非法的,因为它试图在不更改对象的元数据、存储类、网站重定向位置或加密属性的情况下将对象复制到自身。
400InvalidArgument复制源必须提到源桶和密钥:sourcebucket/sourcekey。
400InvalidTag您提供的标记值无效
400MalformedXML您提供的XML格式不正确,或者没有根据我们发布的架构进行验证。
400InvalidArgument授权标头无效--只需要一个' '(空格)。
400InvalidRequest不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。
400MalformedPOSTRequestPOST请求的主体不是格式正确的多部分/表单数据。
400InvalidArgumentPOST要求每个请求只上传一个文件。
400EntityTooSmall您建议的上载小于允许的最小对象大小。
400EntityTooLarge您建议的上载超出了允许的最大对象大小。
400MissingFields请求中缺少字段。
400InvalidRequest此请求缺少凭据字段。
400AuthorizationQueryParametersError分析X-Amz-Credential参数时出错 凭证格式错误 应为<YOUR-AKID>/YYYMMDD/REGION/SERVICE/aws4_request
400MalformedDate日期格式标头无效,应为ISO8601、RFC1123或RFC1123Z时间格式
400AuthorizationQueryParametersErrorX-Amz-Date必须采用ISO8601长格式 "yyyyMMdd'T'HHmmss'Z'"
400InvalidArgument签名标头缺少SignedHeaders字段
400AccessDenied签名标头缺少签名字段
400AccessDenied请求中存在未签名的标头
400AuthorizationQueryParametersError查询字符串身份验证版本4需要X-Amz-Algorithm、X-Amz-Credential、X-Amz Signature、X-Amz-Date、X-Amz-SignedHeaders和X-Amz-Expires参数
400AuthorizationQueryParametersErrorX-Amz-Algorithm 仅支持 "AWS4-HMAC-SHA256".
400AuthorizationQueryParametersErrorX-Amz-Expires 应为数字
400AuthorizationQueryParametersErrorX-Amz-Expires 必须为非负数
400AuthorizationQueryParametersErrorX-Amz-Expires必须少于一星期 (单位:秒)也就是说 给定X-Amz-Expires必须小于604800秒
400XAmzContentSHA256Mismatch提供的 x-amz-content-sha256 标头与计算的内容不匹配
400AccessDeniedAWS认证需要有效的日期或x-amz-date头
400InvalidRequest无效的请求
400InvalidRequest签名请求需要设置JWanFS FGW Server身份验证
403AccessDenied请求已过期
403AccessDenied访问被拒绝
403PostPolicyInvalidKeyName根据策略无效:策略条件失败
403InvalidAccessKeyId您提供的访问密钥ID在我们的记录中不存在
403AccessDenied请求尚未有效
403SignatureDoesNotMatch我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法
404NoSuchBucket指定的存储桶不存在
404NoSuchBucketPolicy存储桶策略不存在
404NoSuchCORSConfigurationCORS配置不存在
404NoSuchLifecycleConfiguration生命周期配置不存在
404NoSuchKey指定的密钥不存在。
404NoSuchUpload指定的多部分上载不存在。上载ID可能无效,或者上载可能已中止或完成。
404OwnershipControlsNotFoundError未找到存储桶所有权控件
404ErrNotFound未找到指定资源
405MethodNotAllowed此资源不允许使用指定的方法
409BucketNotEmpty您尝试删除的bucket不为空
409BucketAlreadyExists请求的存储桶名称不可用。bucket名称不能是现有集合,并且bucket命名空间由系统的所有用户共享。请选择其他名称并重试
409BucketAlreadyOwnedByYou您之前创建命名桶的请求成功了,并且您已经拥有了它。
409ExistingObjectIsDirectory现有对象是一个目录
409ExistingObjectIsFile现有对象是一个文件
412PreconditionFailed至少有一个您指定的前提条件不成立
416InvalidRange请求的范围不满足要求
429ErrTooManyRequest同时请求计数过多
429ErrRequestBytesExceed同时请求字节数超过限制
500ErrOutOfBucketSize桶空间不足,无法写入
500InternalError我们遇到内部错误,请重试。
501NotImplemented您提供的标头表示未实现的功能