在向开放云数据存储API发送请求以及处理响应时,有若干需要考虑的因素。
HTTP头部
与所有开放云端点一样,使用API密钥认证的数据存储请求必须包含x-api-key头部。更多信息,请参见 管理API密钥。
- 不正确或缺失的API密钥会导致401错误。
- 有效但缺乏正确权限的API密钥会导致403错误。
如果请求包含主体,例如创建或更新请求,则需包含Content-Type: application/json和Content-Length头部。大多数客户端会自动包含这些头部。
分页
数据存储通常包含许多条目,这意味着你的代码,特别是在调用列出数据存储条目时,必须处理最大结果数和页面数。要了解更多信息,请参见分页。
过滤器
如果你在数据存储条目的名称中使用前缀,可能想要过滤你的GET调用,如下所示:
def list_entries(universe, data_store, filter):
list_path = f'universes/{universe}/data-stores/{data_store}/entries'
url = base_url + list_path
return requests.get(url, params={'filter': f'id.startsWith("global/{filter}")'}, headers={apiHeaderKey: apiKey})
过滤器语法是极其有限的。有关可用过滤器的信息,请参见标准和有序数据存储的参考文档。
允许缺失标志
标准和有序数据存储的PATCH(更新)方法具有allow_missing参数。如果设置为true,该参数允许你创建不存在的条目,而不是抛出错误。除非你有充分的理由,否则请将此参数保持在默认值false;更新一个从未创建的条目通常表示编程逻辑中的错误。
范围
许多请求要求你指定一个范围,即使是其默认值global。这些范围与权限范围不同,并允许你在数据存储中细分和组织条目。
然而,我们强烈建议使用前缀,而不是创建非默认范围。要了解更多信息,请参见列出和前缀。
Content-MD5
开放云v1 API支持在某些请求中使用可选的base64编码MD5校验和,这可以检测数据完整性问题。许多语言都有内置函数来计算content-md5头部的值。以下示例使用Python:
$ echo "750" | python -c "import base64, hashlib; print(str(base64.b64encode(hashlib.md5(bytes(input(), encoding='utf8')).digest()), encoding='utf8'))"sTf90fedVsft8zZf6nUg8g==
如果你遇到生成有效的content-md5值的问题,可能需要在计算校验和之前将请求主体编码为UTF-8。