Проверка правильности ввода в микросервисах в зависимости от данных другого сервиса - PullRequest
1 голос
/ 28 марта 2019

Я разрабатываю решение для управления фотографиями с помощью микросервисов.

  • Одна служба отвечает за отслеживание данных отдельных фотографий, принадлежащих конкретному пользователю.
  • Другой сервис отвечает за фотоальбомы.

Мне нужно запретить пользователю добавлять не принадлежащие ему фотографии в свой альбом. Очевидно, что мне нужно провести некоторую проверку на «сервисе альбомов». Но информация о владельцах фото есть в «фото сервисе».

Одним из возможных решений, о котором я подумал, было копирование фотографий с соответствующими атрибутами в «службу альбомов». Но мне это не очень нравится, потому что в этом случае в «сервисе альбомов» будет много фотографий, которых нет ни в одном альбоме.

Другим вариантом будет синхронный вызов из «службы альбомов» в «службу фотографий». Но это сломало бы парадигму микросервисов.

Вопрос в том, что было бы хорошим подходом для реализации такой проверки.

1 Ответ

1 голос
/ 28 марта 2019

Пользователь с идентификатором 9876 хочет добавить фотографию с идентификатором 1234 в альбом 333:

PUT /albums/333/photos/1234
user-id:9876 (in header)

Вызов службы сервиса фотографий для подтверждения того, что фотография принадлежит пользователю:

GET /photos/9876/1234 <- a bit contrived
404 Not Found

Not found указывает службе Album, что фотография не принадлежит пользователю, поэтому она возвращает вызывающему абоненту номер 403 (и не обновляет альбом).

Это может нарушить парадигму microservices , как вы говорите, но вы сформулировали свою проблему как проблему проверки в реальном времени.Проблемы реального времени требуют решений в реальном времени.

Если ожидание проверки в реальном времени не ожидалось, вы можете позволить пользователю сделать запрос на добавление фотографии в альбом, а затем выполнить фактическую операцию проверки в более позднее время, возможно, с помощью сообщения.очередь с любым отрицательным результатом, возвращаемым пользователю через веб-сокеты или другой механизм уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...