Как обновить пользователей через API, используя ID пользователя (а не имя пользователя)?

Я хочу, чтобы мое приложение обновляло учётную запись пользователя в Discourse: в частности, отображаемое имя и группы, к которым принадлежит пользователь (например, когда его повышают в моём приложении, он также добавляется в другую группу форума).

Я планировал хранить ссылку на «id участника Discourse» в таблице пользователей моего приложения и использовать её для обновлений, например, POST /users/{id}.json с полезной нагрузкой вроде {"name": "новое имя"}. Но, похоже, все маршруты API ожидают username вместо id.

Я не понимаю, почему это сделано по умолчанию: ведь пользователи могут менять своё имя пользователя? Казалось бы, это должно нарушить интеграцию, если они это сделают.

Как можно надёжно вносить такие изменения, используя стабильный идентификатор (например, id)?

На данный момент, по-моему, ваш лучший вариант — выполнить два API-запроса. Первый — получить пользователя по id, чтобы узнать имя пользователя, а второй — обновить данные по имени пользователя.

Существует возможность обновить пользователя по external_id, но, как мне кажется, это нельзя сделать без включённого единого входа (single-sign-on). При таком подходе Discourse хранит id пользователя вашего приложения, а не наоборот.

Спасибо, у меня тоже была подобная инсайт-минута после публикации.