Miglior modo per aggiornare o creare utente esistente, via API, da client connesso?

Ecco il caso d’uso, che sono sicuro molte persone hanno affrontato:

  • Avere un gruppo di utenti in Discourse
  • Avere un sistema esterno (fornitore di servizi, Drupal) che utilizza l’API per creare utenti Discourse e gestire le appartenenze ai gruppi
  • Drupal ha un set di utenti parzialmente sovrapposto. Ad esempio, gli utenti con lo stesso indirizzo email esistono in Discourse e Drupal, ma non sono collegati
  • Drupal utilizza l’API per sincronizzare utenti, gruppi e appartenenze perché gli utenti potrebbero non utilizzare mai l’SSO per accedere a Discourse, affidandosi invece alle email

Comportamento attuale:

  • Discourse a volte rifiuta la chiamata API per creare un utente Discourse, perché esiste già un utente Discourse con la stessa email

Comportamento desiderato:

  • Discourse collega l’utente Discourse esistente all’utente Drupal, tramite email

Soluzione proposta:

  • Interrogare l’endpoint API di Discourse /admin/users/list/all.json?email=$email per recuperare eventuali utenti con un indirizzo email corrispondente
  • Se l’utente corrispondente esiste
    • Collega gli utenti esistenti (lato Drupal)
  • altrimenti
    • Crea un nuovo utente Discourse

Domande

  • Sembra una soluzione ragionevole, o c’è un modo migliore per farlo?
  • La query API è formulata correttamente?
    all.json né il parametro della stringa di query email sono documentati, e ho trovato pochissimi esempi, ma questo post sembra indicare che sia il modo migliore per procedere.

Non sono un esperto come alcuni, ma penso di sì.

Mi sembra giusto. La migliore documentazione, sempre aggiornata, è Reverse engineer the Discourse API.