在 FIWARE 对象存储中存储数据

Storing data in FIWARE Object Storage

我正在构建一个将文件存储到 FIWARE 对象存储中的应用程序。 我不太明白将文件存储到存储中的正确方法是什么。

下面摘自 Object Storage - User and Programmers Guide 的代码 python 代码片段显示了两种实现方式:

def store_text(token, auth, container_name, object_name, object_text):
   headers = {"X-Auth-Token": token}

   # 1. version
   #body = '{"mimetype":"text/plain", "metadata":{}, "value" : "' + object_text + '"}'

   # 2. version
   body = object_text

   url = auth + "/" + container_name + "/" + object_name

   return swift_request('PUT', url, headers, body)

1。 version 让我感到困惑,因为当我第一次看到唯一与对象存储一起工作的 Node.js 模块(repo:fiware-object-storage)时,它似乎使用 1。版本。由于模块正在调用旧的 (v.1.1) API 版本而不是可能是最新的 (v.2.0),参考 python 示例,不确定这是否是过时的版本做还是不做。


当我更多地使用该模块时,意识到它不起作用并且它的代码完全是一团糟。所以我分叉了这个项目并很快明白我需要从头开始重写它,以上面提到的使用指南中的 python 示例作为参考。 Link to my repo.

在撰写本文时,唯一未实现的方法是对象存储 (PUT) 和对象获取 (GET)。


还有一些关于对象存储的其他问题,我发送给了 fiware-lab-help@lists.fiware.org,但没有收到任何回音,所以在这里问他们。

  1. 没有多少编写 API 库的经验。 我是否需要担心身份验证令牌过期? 我认为每次与存储交互时都不需要进行新的身份验证。身份验证应该在服务器启动时发生一次(我们创建一个实例)并且它在内部保留它。 我是否应该实施某种刷新令牌的机制?

  2. 租户id有变化吗?从下面的引述来看,假设得到一个租户我只是一次性交易,然后你可以在以后使用它配置以减少身份验证调用。

A valid token is required to access an object store. This section describes how to get a valid token assuming an identity management system compatible with OpenStack Keystone is being used. If the username, password and tenant details are known, only step 3 is required. source

  1. 在获取租户的身份验证过程中,我应该如何 select "right" 一个? 现在我只是采取第一个与示例代码类似。

  2. 一个对象存储容器是否只属于一个region?

只使用你所说的版本 2。忽略你的版本 1。它在示例中被注释掉了。它应该从文档中删除。

(1) 令牌将在一段时间内有效。这可能是一个小时或一天,具体取决于设置。该时间段应在身份验证服务返回的令牌中指定。令牌需要定期刷新。

(2)租户id不变。

(3) 通常只返回一个租户id。但是,您可能被分配了多个 ID,在这种情况下,您必须选择当前使用的 ID。容器通常属于单个租户,不在租户之间共享。

(4) 容器通常仅限于一个区域。当 multi-region 对容器的支持被添加到 Swift.

时,这在未来可能会改变

解决了我的问题并创建了与 FIWARE 对象存储一起工作的 NPM 模块:https://github.com/renarsvilnis/fiware-object-storage-ge