用于获取读取模型列表的 Wolkenkit REST API 执行 return 心跳条目

Wolkenkit REST API for getting a read model list does return a heartbeat entry

我听说 wolkenkit 也提供 REST API,但没有找到任何相关文档。我筛选了资源并找到了一些关于如何执行此操作的指示。

我正在使用 HTTPie 执行来自 cli 的请求:

$ http post https://local.wolkenkit.io:3500/v1/read/lists/labels

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate
Connection: keep-alive
Date: Wed, 30 Aug 2017 21:08:07 GMT
Expires: 0
Pragma: no-cache
Surrogate-Control: no-store
X-FRAME-OPTIONS: DENY
X-Powered-By: Express
X-XSS-Protection: 1; mode=block
content-type: application/json
transfer-encoding: chunked

{"name":"heartbeat"}
{"label":"first","id":"baa1b2b6-ab85-4929-a488-0cae622de20a","isAuthorized":{"owner":"anonymous","forAuthenticated":false,"forPublic":true}}
{"label":"second","id":"7fc6c3c9-3285-4292-b3db-6d88ca90a347","isAuthorized":{"owner":"anonymous","forAuthenticated":false,"forPublic":true}}

我的 label readModel 中有两个条目,但似乎还有第三个 {"name":"heartbeat"}。那是从哪里来的,是什么意思?

这是错误还是我不小心创建了该条目?

免责声明:我是 wolkenkit 的开发者之一。

这实际上既不是错误,也不是您不小心创建了该条目;-)

在幕后,我们通过 HTTP 流式传输 JSON,并且我们有一些代理服务器(和类似的东西)在两个数据包之间存在长时间停顿时导致问题的经验。

过去我们多次更改了读取模型的交付方式,但我认为这仍然不是必需的,所以这是过去的遗留问题。 (如果说的是活动路线,故事就不同了,这里肯定还是需要的。)

在我们底层使用的库中,json-lines-client,我们过滤掉心跳事件:

const isNotHeartbeat = function (data) {
  const keys = Object.keys(data);

  return !(
    (keys.length === 1) &&
    (keys[0] === 'name') &&
    (data.name === 'heartbeat')
  );
};

(摘自source code of json-lines-client 0.7.9

目前,我建议在您的代码中引入类似的逻辑,这样您就可以简单地忽略这些事件(随着时间的推移可能会不止一个,而且它们不需要是第一个) .