Quando utilizzo l’API per ottenere l’oggetto utente di Discourse, funziona correttamente, ma non vedo incluso l’external_id. Se ho un ID utente o un nome utente di Discourse, come posso recuperare l’external_id da questi?
Aha - stavo chiamando /users/blake.erickson.json (senza /admin), che restituisce anch’esso un oggetto utente, ma senza single_sign_on_record.
Ehi, perché l’endpoint /users/ accetta (solo?) un nome utente, mentre se vuoi ottenere un utente tramite il suo Discourse ID, devi usare /admin/users/:id.json? Sono solo stranezze del design dell’API?
Un’altra stranezza: se recupero un utente tramite il suo external_id, chiamando /users/by-external/:id.json, non ottengo il single_sign_on_record.
Quindi l’API ha alcune stranezze… a volte un oggetto utente contiene le proprietà single_sign_on_record, a volte no ![]()
Per progettazione, l’endpoint admin restituirà più dati rispetto all’endpoint non admin. Sì, entrambi recuperano record “utente”, ma sarebbe estremamente negativo se l’endpoint /user/..., accessibile dagli utenti regolari, restituisse gli stessi dati di /admin/user/....
Aha, non sapevo che l’endpoint /user fosse accessibile agli utenti individuali. Avevo dimenticato che esistano le chiavi API per gli utenti.
Continuo a essere confuso dalle incongruenze. Al momento, se voglio ottenere single_sign_on_record, devo conoscere l’ID utente di Discourse (/admin/users/:username.json non funziona)… ma la maggior parte delle altre chiamate API sembra richiedere il nome utente (come /users/:username.json).
E poi ci sono endpoint API separati che sono molto simili e sembrano quasi identici, ma restituiscono risultati diversi; ad esempio, /admin/users mi fornisce i dati single_sign_on_record per l’utente, mentre chiamando semplicemente /users/ non li ottengo.
Niente di tutto questo è un grosso problema, sto imparando strada facendo… una volta che avrò fatto più progressi, potrei vedere se riesco a modificare un po’ la documentazione e rendere alcune di queste cose più chiare.
La distinzione qui deriva dal fatto che gli endpoint restituiscono i dati necessari per visualizzare le pagine nell’interfaccia utente. Dai un’occhiata qui:
Certo, lo capisco perfettamente—e ho usato quel trucco per monitorare tutte quelle richieste XHR. Tutto ok. È solo… incoerente.
Ma sono infinitamente grato che Discourse abbia un’API così potente!
