У меня есть существующая экспресс-конечная точка, которая выглядит так:
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
, он также извлекал некоторые данные из другого сервиса и добавлял их. (См. мой связанный вопрос, где рекомендуется использовать согласование содержания).
т.е. ответ будет:
{
"id": 123,
"name": "Foo",
"extraData": {
"foo": "bar"
}
}
Теперь я могу сделать это с помощью экспресса, вот как я это сделал:
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 проверит заголовки, вызовет оба микросервиса и соединит их вместе.
Это возможно?