Лучший способ обновить или создать существующего пользователя через API с подключенного клиента?

Вот сценарий использования, с которым, уверен, сталкивались многие:

  • Есть множество пользователей в Discourse.
  • Есть внешняя система (провайдер услуг, Drupal), которая использует API для создания пользователей Discourse и управления членством в группах.
  • В Drupal есть частично пересекающийся набор пользователей. То есть пользователи с одинаковым адресом электронной почты существуют и в Discourse, и в Drupal, но не связаны между собой.
  • Drupal использует API для синхронизации пользователей, групп и членства, поскольку пользователи могут никогда не использовать SSO для доступа к Discourse, полагаясь вместо этого на электронную почту.

Текущее поведение:

  • Discourse иногда отклоняет API-вызов для создания пользователя Discourse, потому что пользователь с таким же адресом электронной почты уже существует в Discourse.

Желаемое поведение:

  • Discourse связывает существующего пользователя Discourse с пользователем Drupal через адрес электронной почты.

Предлагаемое решение:

  • Запросить к конечной точке API /admin/users/list/all.json?email=$email в Discourse, чтобы получить любых пользователей с совпадающим адресом электронной почты.
  • Если совпадающий пользователь существует:
    • Связать существующих пользователей (на стороне Drupal).
  • Иначе:
    • Создать нового пользователя Discourse.

Вопросы

  • Кажется ли это разумным решением или есть лучший способ?
  • Правильно ли сформирован запрос к API?
    Ни all.json, ни параметр запроса email не задокументированы, и я нашел очень мало примеров, но этот пост указывает, что это лучший путь.

Я не такой эксперт, как некоторые, но я так думаю.

Мне это выглядит правильно. Лучшая и всегда актуальная документация — это Обратная разработка API Discourse.