我有一个现有的快速端点,如下所示:
app.get(`${route}/:id`, async (req, res) => {
try {
const id = req.params.id;
const result = await dbFn(id);
res.send(result);
} catch (err) {
res.status(500).end();
}
});
这将返回一个如下所示的对象:
{
"id": 123,
"name": "Foo"
}
现在,我想扩展这个 API,这样如果它有一个Accept: application/vnd.v2
header,那么它还会从不同的服务获取一些数据,并将其添加到。 (请参阅我的相关问题,其中建议使用内容协商 https://softwareengineering.stackexchange.com/questions/390956/are-different-endpoints-to-display-the-same-resource-in-different-ways-restful).
IE。响应将是:
{
"id": 123,
"name": "Foo",
"extraData": {
"foo": "bar"
}
}
现在,我可以用 Express 来做到这一点,我是这样做的:
app.get(`${route}/:id`, async (req, res, next) => {
try {
const id = req.params.id;
const jobSeeker = await dbFn(id);
if (req.accepts("application/vnd.v2")) {
const response = await axios.get(`${integrationApiPath}/connection/${id}`);
const ssiData = response.data;
res.send({
...jobSeeker,
ssiData
})
}
else {
res.send(jobSeeker);
}
} catch (err) {
res.status(500).end();
}
});
但我觉得这种 API 版本控制方式有点混乱。
如果我可以让 nginx 来处理这个版本控制,那就更好了。
这样,我不需要修改现有的 API,我只需创建新服务,让 nginx 检查标头,进行两个微服务调用并将它们连接在一起。
这可能吗?