Quando uso a API para obter o objeto de usuário do Discourse, tudo funciona bem, mas não vejo o external_id incluído nele. Se eu tiver um ID ou nome de usuário do Discourse, como posso obter o external_id a partir disso?
Aha - eu estava chamando /users/blake.erickson.json (sem /admin), que também retorna um objeto de usuário, mas sem single_sign_on_record.
Ei, por que o endpoint /users/ aceita (apenas?) um nome de usuário, mas se você quiser obter um usuário pelo ID do Discourse, é /admin/users/:id.json? São apenas peculiaridades do design da API?
Mais estranheza: se eu recuperar um usuário pelo external_id, chamando /users/by-external/:id.json, não recebo o single_sign_on_record.
Então a API tem algumas peculiaridades… às vezes um objeto de usuário tem as propriedades single_sign_on_record, às vezes não ![]()
Por design, o endpoint de administrador retornará mais dados do que o endpoint não administrativo. Sim, ambos buscam registros de “usuário”, mas seria extremamente problemático se o endpoint /user/..., que usuários comuns podem chamar, retornasse o mesmo que /admin/user/....
Aha, não percebi que o endpoint /user estaria disponível para usuários individuais. Esqueci que existem chaves de API de usuário.
Fico sempre confuso com as inconsistências. No momento, se quero obter single_sign_on_record, preciso conhecer o ID do usuário do Discourse (/admin/users/:username.json não funciona)… mas a maioria das outras chamadas de API parece exigir o nome de usuário (como /users/:username.json).
E ainda há endpoints de API separados que são muito semelhantes e parecem quase idênticos, mas retornam resultados diferentes; por exemplo, /admin/users me fornece dados de single_sign_on_record para o usuário, mas chamar apenas /users/ não fornece.
Nada disso é grande coisa, estou aprendendo conforme avanço… quando chegar mais longe, talvez eu possa ajustar um pouco a documentação e tornar tudo isso mais claro.
A distinção aqui decorre do fato de que os endpoints retornam os dados necessários para renderizar as páginas na interface do usuário. Dê uma olhada aqui:
Claro, eu entendo totalmente — e tenho usado esse truque para monitorar todas essas requisições XHR. Está tudo bem. É só… inconsistente.
Mas sou infinitamente grato por o Discourse ter uma API tão robusta!
