Como posso obter o external_id do objeto de usuário?

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?

http://localhost:3000/admin/users/1/blake.erickson.json

Terá as informações do SSO:

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 :wink:

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. :wink: Mas sou infinitamente grato por o Discourse ter uma API tão robusta!