¿La mejor manera de actualizar o crear un usuario existente, a través de la API, desde un cliente conectado?

Aquí está el caso de uso, que estoy seguro que muchas personas han enfrentado:

  • Tener un montón de usuarios en Discourse
  • Tener un sistema externo (proveedor de servicios, Drupal) que utiliza la API para crear usuarios de Discourse y administrar membresías de grupos
  • Drupal tiene un conjunto de usuarios parcialmente superpuesto. Es decir, los usuarios con la misma dirección de correo electrónico existen en Discourse y Drupal, pero no están vinculados.
  • Drupal utiliza la API para sincronizar usuarios, grupos y membresías porque los usuarios podrían no usar nunca el SSO para acceder a Discourse, sino depender de los correos electrónicos.

Comportamiento actual:

  • Discourse a veces rechaza la llamada a la API para crear un usuario de Discourse, porque ya existe un usuario de Discourse con el mismo correo electrónico.

Comportamiento deseado:

  • Discourse vincula al usuario de Discourse existente con el usuario de Drupal, a través del correo electrónico.

Solución propuesta:

  • Consultar el punto final de la API de Discourse /admin/users/list/all.json?email=$email para obtener los usuarios con una dirección de correo electrónico coincidente.
  • Si el usuario coincidente existe
    • Conectar los usuarios existentes (lado de Drupal)
  • de lo contrario
    • Crear un nuevo usuario de Discourse.

Preguntas

  • ¿Parece una solución razonable, o hay una mejor manera de hacerlo?
  • ¿Está formada correctamente la consulta a la API?
    Ninguno de all.json ni el parámetro de cadena de consulta email están documentados, y encontré muy pocos ejemplos, pero esta publicación parece indicar que es la mejor manera de proceder.

No soy un experto como algunos, pero creo que sí.

Me parece correcta. La mejor documentación, y siempre actualizada, es Ingeniería inversa de la API de Discourse.