Contesto
A causa dell'apolidia dello stile architettonico REST che implica che ogni richiesta è completamente isolata, il server principale non memorizza mai alcuna informazione sul client.
Quindi, il controllo della concorrenza pessimistico non è adatto perché richiederebbe che il server memorizzi quale client ottiene il lock su una risorsa.
Viene quindi utilizzato il controllo ottimistico della concorrenza, con l'aiuto dell'intestazione Etag
. (btw, come ho chiesto il link )
Problema
Il problema principale con un meccanismo ottimistico di controllo della concorrenza è che tu permetti sempre, tutti i client, di eseguire qualsiasi operazione.
E vorrei evitarlo senza rompere il principio di apolidia di REST. Voglio dire che tutti i client non possono eseguire alcuna operazione in qualsiasi momento.
Domanda
Nella mia mente, sarebbe possibile con un meccanismo di controllo della concorrenza semi-ottimistico , come quello:
- I client possono richiedere un token
- È possibile generare un solo token e ha un periodo di validità limitato
- Per eseguire operazioni su risorse (come POST o PUT ), il client deve fornire questo token come parte del corpo (o dell'intestazione?) della richiesta. Il client che non ha il token non può eseguire queste operazioni.
È molto simile al controllo ottimistico della concorrenza, tranne che solo un client può eseguire alcune operazioni (quella che ha ottenuto il token) ... al contrario di "tutti i client possono eseguire tutte le operazioni".
Questo meccanismo è compatibile con uno stile architettonico REST? Rompe nessuno dei suoi limiti? Stavo pensando di chiedere su SO, ma questa sembra più una domanda di alto livello, relativa alla progettazione del software.