У меня есть существующая конечная точка экспресса, которая выглядит следующим образом:
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 проверять заголовки, выполнять оба вызова микросервисов и объединять их вместе.
Возможно ли это?