Come accedere alle risorse relative all'utente su un'API REST?

2

Ho un'API REST in fase di sviluppo in cui alcune risorse sono correlate all'utente e gli utenti devono autenticarsi per accedere a tali risorse. Si è tentati di prendere una scorciatoia e sostituire un identificatore di:

/profile/[user_id]/

con

/profile/

considerando che user_id è noto sulla base dei dati di autenticazione. In tal caso il / profilo / identificatore indica una risorsa diversa per ciascun utente. Questo non sembra molto rappresentativo, a meno che non si consideri che l'intestazione di autenticazione sia parte dell'identificatore.
Un esempio più complesso quando diciamo che esiste una risorsa 'elemento' disponibile per tutti gli utenti e ogni utente può impostare la propria proprietà 'etichetta' su un oggetto. Ancora una volta è allettante avere solo

/item/[item_id]/label/

invece di

/item/[item_id]/label/[user_id]

Ho trovato un esempio in cui lo striping della parte user_id ha portato a potenziali problemi (un caso in cui è stato introdotto un utente amministratore, che dovrebbe essere in grado di accedere a tutte le risorse degli utenti, ma anche filtrarlo dall'utente - Una applicazione Web come client API REST: come gestire gli identificatori di risorse ) ma non sembrava un problema molto grande. Ci sono buone ragioni per cui i dati di autenticazione non dovrebbero essere considerati parte dell'identificatore di risorse?

    
posta dadasign 23.10.2017 - 23:22
fonte

2 risposte

3

Ho usato /profiles/me prima, non mi sembra che non sia rappresentativo. Ne hanno anche alcune popolari API REST. Vedi questa risposta su SO.

Se sei preoccupato per l'ambiguità, puoi sempre avere un URI completamente definito insieme a quello breve che punta alla stessa risorsa, e darlo ai client in contesti sensibili.

    
risposta data 24.10.2017 - 11:46
fonte
1

Una buona ragione è la cache. Se in seguito si decide di inserire un'intestazione della cache nella risorsa e un altro utente accede, visualizzerà dati errati.

Un altro è il debug. Se incontri problemi con il tuo sistema di token e hai bisogno di disabilitarlo durante lo sviluppo, è bello che possa essere semplicemente disabilitato e il sistema funzioni ancora.

Non è molto più lavoro mettere un id utente sulla risorsa ma è una soluzione più corretta.

    
risposta data 24.10.2017 - 17:08
fonte

Leggi altre domande sui tag