Abbiamo stabilito quanto segue, utilizzando OAuth 2 (che è molto preferibile a OAuth 1). In particolare stiamo utilizzando il flusso resource owner password credentials. Su come integrarla nel nostro servizio RESTful, ecco l'idea:
- La risorsa iniziale, quando viene colpito da un utente non autorizzato, restituisce un 401. Il corpo del 401 contiene un singolo collegamento, con
rel=oauth2-token
. (Il modo in cui segnali i collegamenti dipende dal tipo di supporto utilizzato, si utilizza HAL, ma è possibile utilizzare anche solo l'intestazione Link
.)
- Dopo che l'utente si autentica, torna alla risorsa iniziale, inviando l'intestazione
Authorization
al portatore token restituito dal processo OAuth 2. A questo punto, restituiamo un 200, con tutti i link normali disponibili.
Non esporre la creazione dell'account, ma se si volesse farlo, lo farei con un altro link disponibile per gli utenti non autorizzati nella risorsa iniziale. Quel collegamento avrebbe una personalizzazione rel
poiché è specifica per la tua applicazione, ad es. rel=http://rels.myapi.com/users
Un buon progetto RESTful indica che il collegamento con questo rel
indica ad es. http://myapi.com/users
e che i consumatori dell'API eseguano un POST
a quell'endpoint, che restituisce a loro la nuova risorsa utente con un'intestazione Location
che punta alla risorsa utente appena creata ad es. http://myapi.com/users/username
. (Le stesse risorse utente sarebbero naturalmente un altro rel
, che distingue tra la risorsa utente singolare e la plurale risorsa di raccolta utenti.)