我很难找到教程。我是 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;
这本质上就是我拍摄的目的吗?用户是否会发布到此端点,等待响应,然后在收到响应后再次发布以重新订阅?这样长期甚至无限期的运行有没有问题?
我确实可以使用更复杂的示例,但我只是找不到它们。当你用谷歌搜索时,你发现的大部分内容都涉及集成第三方 webhook,比如 Github、Slack 等,而不是我需要构建的自定义 webhook。
我也不完全反对另一种方法。只是寻找通知 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;
其中函数processSomething
以异步方式执行操作并通过响应调用客户端的 API,但您的路线仍然通过响应进行应答 -200 OK
表示您收到了客户端的消息。
您也可以将有关成功/失败消息的通知委托委托给代码的另一个位置,但您需要保存webhookUrl
为了那个原因。在事件系统中,您可以创建事件(或简单消息),其中属性之一是客户端的 url。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)