Tsa*_*mba 12 javascript rest webhooks node.js express
我很难找到教程。我是 webhooks 的新手,除了对它们应该如何工作的一些基本描述之外,还没有使用或看过它们。
我们的用例是在有新记录时更新 API 的用户。由于我们正在使用 Kafka 并且已经确定了“最终一致性”,因此另一个用途可能是在无法从 Kafka 流中正确读取/写入记录时通知他们错误。
所以,据我所知,基本概念是:
const express = require("express");
const router = express.Router();
const processSomething = callback => {
setTimeout(callback, 20000);
}
router.post("/hook", (req, res, next) => {
processSomething(() => {
res.status(200).send({
id: "ABC123",
message: "New record added!"
});
});
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
这基本上是我拍摄的目的吗?用户是否会发布到此端点,等待响应,然后在收到响应后再次发布以重新订阅?长时间甚至无限期运行是否有问题?
我真的可以使用更复杂的例子,但我只是没有找到它们。您在谷歌搜索时发现的大部分内容都涉及集成第三方 webhooks,如 Github、Slack 等,而不是我需要构建的自定义。
我也不完全反对另一种方法。只是寻找通知 API 用户更新和其他重要信息的最佳方式。
Webhooks 尝试通知用户延迟事件,但它们以异步方式进行。您的代码是同步的,这意味着用户需要等待回复。我认为它应该看起来更像这样
const express = require("express");
const router = express.Router();
const processSomething = callback => {
setTimeout(callback, 20000);
}
router.post("/hook", (req, res, next) => {
processSomething(() => {
const webhookUrl = req.params.url;
/**
* Your Kafka action or something else. There
* you should collect info about success or
* fail of client's action.
*/
/**
* Your API call to webhookUrl with
* your defined body about status of event
*/
});
res.status(200).send('OK')
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
其中函数processSomething以异步方式执行您的操作,并通过响应调用客户端的 API,但您的路由仍然通过响应进行应答 -200 OK意味着您从客户端收到了消息。
您还可以将有关成功/失败消息的通知客户端委托给代码的另一个位置,但您需要webhookUrl为此进行保存。在事件系统中,您可以创建事件(或简单消息),其中属性之一是客户端的 url。
| 归档时间: |
|
| 查看次数: |
15245 次 |
| 最近记录: |