努力
加油

华为云和腾讯云的对象存储服务支持哪些相同的API接口?

华为云 OBS(Object Storage Service)和腾讯云 COS(Cloud Object Storage)在底层架构上虽然各有千秋,但在行业标准兼容性上,两者都高度遵循了 Amazon S3 API 规范。这意味着,对于绝大多数基于 S3 协议开发的客户端、SDK 或第三方工具来说,它们支持的核心接口集合是高度重合的。

具体来说,这两家云厂商的对象存储服务都完整支持以下类别的 S3 兼容 API:

1. 基础 Bucket 操作

这是对象存储最核心的部分,用于管理容器(Bucket)。

  • CreateBucket:创建存储空间。
  • DeleteBucket:删除空存储空间。
  • ListBuckets:列出当前用户下的所有存储空间。
  • GetBucketLocation / HeadBucket:获取存储空间的地理位置信息或检查存储空间是否存在。

2. 对象(Object)数据读写

涉及具体文件的上传、下载和管理。

  • PutObject:上传单个对象(支持流式上传)。
  • GetObject:下载对象内容。
  • HeadObject:获取对象元数据(不返回内容),常用于检查文件是否存在及获取大小、ETag 等信息。
  • CopyObject:在同一或不同 Bucket 间复制对象。
  • DeleteObject:删除单个对象。
  • ListObjects / ListObjectsV2:列出 Bucket 中的对象列表(支持分页、前缀过滤)。

3. 分片上传(Multipart Upload)

针对大文件场景的标准流程,确保断点续传和大文件稳定性。

  • InitiateMultipartUpload:初始化分片上传任务。
  • UploadPart:上传各个分片。
  • CompleteMultipartUpload:合并所有分片,完成上传。
  • AbortMultipartUpload:取消分片上传任务。
  • ListParts:列出已上传的分片。

4. 生命周期与元数据管理

  • PutObjectAcl / GetObjectAcl:设置和获取对象的访问控制列表(ACL)。
  • PutBucketPolicy / GetBucketPolicy:设置和获取 Bucket 的权限策略(JSON 格式)。
  • PutObjectTagging / GetObjectTagging:设置和获取对象的标签(Tags),用于资源分类和计费分析。
  • Lifecycle 相关接口:配置自动转储(如转为低频/归档存储)、过期删除等规则。

5. 高级功能接口

  • PreSignedURL 生成:通过签名 URL 实现临时授权访问(通常由 SDK 封装,但底层依赖相同的签名算法和接口逻辑)。
  • RestoreObject:从归档存储中恢复对象。
  • SelectObjectContent:对 CSV/JSON 文件进行 SQL 查询(部分场景支持)。

关键差异与注意事项

尽管 API 名称和基本行为一致,但在实际使用中需注意以下几点“坑”:

1. 端点(Endpoint)不同

  • 华为云:使用类似 obs.cn-north-4.myhuaweicloud.com 的专属域名。
  • 腾讯云:使用类似 cos.ap-guangzhou.myqcloud.com 的域名。
  • 影响:代码中硬编码 Endpoint 会导致无法连接,需根据目标云厂商动态配置。

2. 区域(Region)命名略有差异

  • 华为云的 Region 标识如 cn-north-4(北京四)。
  • 腾讯云的 Region 标识如 ap-guangzhou(广州)。
  • 虽然不影响 API 调用本身,但在构建请求路径或签名时需注意地域参数的一致性。

3. 默认加密方式不同

  • 华为云 OBS 默认启用服务端加密(SSE-OBS),密钥由华为云托管。
  • 腾讯云 COS 默认也开启加密,但更强调 KMS 集成。
  • 在使用 GetObject 时,若未正确配置解密上下文,可能遇到解密失败问题。

4. 自定义 Header 扩展

两家厂商都提供了一些非标准 S3 的扩展头(X-Huawei- 或 X-Cos-),用于实现其特有功能(如华为云的“桶策略增强”、腾讯云的“数据万象 CI”触发器)。这些扩展接口不通用,迁移时需单独处理。

5. 签名算法版本

目前主流均支持 V4 签名算法,但旧版 SDK 可能默认使用 V2。建议统一升级至支持 Signature Version 4 (SigV4) 的最新版 SDK,以确保跨平台兼容性最佳。


实际开发建议

如果你正在做多云适配或迁移,推荐使用 AWS SDK for Go/Java/Python/C++ 等官方维护的多云兼容 SDK,并指定对应的 endpoint 和 provider。例如:

# Python boto3 示例,同时适用于华为云和腾讯云
import boto3

# 华为云
s3_huawei = boto3.client(
    's3',
    endpoint_url='https://obs.cn-north-4.myhuaweicloud.com',
    aws_access_key_id='YOUR_HUAWEI_KEY',
    aws_secret_access_key='YOUR_HUAWEI_SECRET'
)

# 腾讯云
s3_tencent = boto3.client(
    's3',
    endpoint_url='https://cos.ap-guangzhou.myqcloud.com',
    aws_access_key_id='YOUR_TENCENT_KEY',
    aws_secret_access_key='YOUR_TENCENT_SECRET'
)

✅ 结论:华为云 OBS 和腾讯云 COS 均完整支持 Amazon S3 核心 API 子集,涵盖 Bucket 管理、对象 CRUD、分片上传、ACL、生命周期等标准操作。差异主要体现在 Endpoint、Region 命名、部分扩展特性及默认安全策略上。只要使用标准 S3 兼容 SDK,即可实现两套服务的无缝切换。