Когда я использую API для получения объекта пользователя Discourse, всё работает нормально, но я не вижу включённого external_id. Если у меня есть ID пользователя Discourse или его имя пользователя, как я могу получить external_id?
Ага — я вызывал /users/blake.erickson.json (без /admin), который тоже возвращает объект пользователя, но без single_sign_on_record.
Кстати, почему эндпоинт /users/ принимает (только?) имя пользователя, а если нужно получить пользователя по его ID в Discourse, то используется /admin/users/:id.json? Это просто особенности проектирования API?
Дальше ещё страннее: если я получаю пользователя по его external_id, вызывая /users/by-external/:id.json, то single_sign_on_record в ответе отсутствует.
Так что у API есть свои причуды… иногда объект пользователя содержит свойства single_sign_on_record, а иногда нет ![]()
По замыслу административная конечная точка возвращает больше данных, чем обычная конечная точка. Да, обе они запрашивают записи «user», но было бы крайне плохо, если бы конечная точка /user/..., которую могут вызывать обычные пользователи, возвращала то же самое, что и /admin/user/....
Ага, я не знал, что эндпоинт /user доступен для отдельных пользователей. Я забыл, что существуют ключи API для пользователей.
Меня постоянно сбивают с толку несоответствия. Сейчас, если мне нужен single_sign_on_record, я должен знать ID пользователя Discourse (запрос к /admin/users/:username.json не работает)… но большинство других вызовов API, похоже, требуют имя пользователя (например, /users/:username.json).
Кроме того, существуют отдельные эндпоинты API, которые очень похожи и кажутся почти идентичными, но возвращают разные результаты. Например, /admin/users возвращает данные single_sign_on_record для пользователя, а вызов просто /users/ — нет.
В этом нет ничего критичного, я разбираюсь по ходу дела… когда я продвинусь дальше, возможно, попробую немного доработать документацию и сделать некоторые моменты более понятными.
Различие здесь проистекает из того факта, что конечные точки возвращают данные, необходимые для отображения страниц в пользовательском интерфейсе. Посмотрите здесь:
Конечно, я прекрасно понимаю — и я сам использую этот трюк для отслеживания всех этих XHR-запросов. Всё в порядке. Просто… это работает нестабильно.
Но я бесконечно благодарен, что у Discourse такой мощный API!
