Допустим, есть два (или более) микросервиса RESTful, обслуживающих JSON.Служба (A) хранит информацию о пользователе (имя, логин, пароль и т. Д.), А служба (B) хранит сообщения от этого пользователя (например, sender_id, subject, body, rcpt_ids).
Служба (A) включена/profile/{user_id}
может ответить:
{id: 1, name:'Bob'}
{id: 2, name:'Alice'}
{id: 3, name:'Sue'}
и т. Д.
Сервис(B) отвечая на /user/{user_id}/messages
, возвращает список сообщений, предназначенных для этого {user_id}, например:
{id: 1, subj:'Hey', body:'Lorem ipsum', sender_id: 2, rcpt_ids: [1,3]},
{id: 2, subj:'Test', body:'blah blah', sender_id: 3, rcpt_ids: [1]}
Какобрабатывает ли клиентское приложение, использующее эти сервисы, объединение списка сообщений так, чтобы вместо идентификаторов отправителя / rcpt отображались имена?
Метод 1 : извлечение списка сообщений, затем запуск извлечения профиляинформация для каждого идентификатора, указанного в sender_id
и rcpt_ids
?Это может потребовать сотен запросов и может занять некоторое время.Скорее наивно и неэффективно и может не масштабироваться со сложными приложениями ???
Метод 2 : Извлечь список сообщений, извлечь все идентификаторы пользователей и сделать групповой запрос для всех соответствующих пользователей отдельно.Это предполагает, что такая конечная точка службы существует.Все еще существует задержка между получением списка сообщений, извлечением идентификаторов пользователей, отправкой запроса на массовую информацию о пользователе, а затем ожиданием ответа на массовую информацию о пользователе.
В идеале я хочу разослать полный набор ответов за один раз (сообщения и информация о пользователе).Мои исследования привели меня к объединению ответов на уровне сервиса ... aka Метод 3 : техника API Gateway.
Но как это вообще реализовать?
Я могу получить список сообщений, извлечь идентификаторы пользователей, сделать закулисный вызов и получить данные пользователей, объединить наборы результатов, а затем обработать этот финальный файл.результат вверх ... Это нормально работает с двумя службами за кулисами ... Но что, если список сообщений зависит от большего количества служб ... Что делать, если мне нужно запросить несколько служб за кулисами, дальнейший анализ ответов этих, запрос большеуслуги, основанные на вторичных (третичных?) результатах, а затем, наконец, объединяются ... где останавливается это безумие?Как это влияет на время отклика?
И теперь я эффективно создал еще одного "клиента", который объединяет все ответы микросервиса в один мега-ответ ... который ничем не отличается от Метод 1 выше ... кроме как на уровне сервера.
Так ли это в "реальном мире"?Есть идеи?Существуют ли какие-либо проекты с открытым исходным кодом, построенные на такой архитектуре шлюза API, которые я мог бы изучить?