Come gestire più "punti di ingresso" per un'azione in un'API REST?

2

Diciamo che abbiamo due tipi di risorse, user e group .
Ogni utente può appartenere a più gruppi e ogni gruppo può avere molti membri.
Così posso modellare la mia API in questo modo

/
|_ /users/{id} 
|   |_ groups
|
|_ /groups/{id} 
    |_ members 

Diciamo che le nostre risorse espongono solo due azioni. Puoi aggiungere un utente a un gruppo o rimuoverne uno.
Quando si arriva all'implementazione, potrei pensare a due possibili richieste per ogni azione.
Puoi inserire un nuovo user in una group di% collection% o PUT un nuovo members in una% group di user .

Devo implementare entrambi i "punti di ingresso"? Questo è previsto nelle applicazioni RESTful? In caso contrario, quale dovrei implementare?

    
posta mattecapu 24.10.2014 - 11:10
fonte

2 risposte

6

REST non ha aspettative in merito. Puoi implementare entrambi o solo uno di essi. Inoltre c'è una terza possibilità per avere una risorsa user_group_relation che gestisce questa funzionalità.

Quale ti serve o vuoi implementare dipende dalle tue esigenze. Se è per un'API pura, dovrebbe essere sufficiente (vorrei aggiungere un membro a un gruppo, poiché questo sembra più naturale).

Ma se hai un sito web o un'app che offre entrambe le opzioni per la modifica e ha due tipi di risposta molto distinti, potrebbe essere più comodo implementarli entrambi. Supponiamo che una pagina utente abbia un elenco di gruppi in cui è possibile aggiungere gruppi e allo stesso tempo i gruppi mostrano elenchi di utenti in cui è possibile aggiungere nuovi membri. Entrambe le liste sono molto diverse, entrambe le azioni dovrebbero restituire risposte molto diverse per aggiornare tali elenchi (e forse più informazioni specifiche per quelle pagine come il numero di gruppi per l'utente, il numero di utenti per il gruppo).

    
risposta data 24.10.2014 - 11:28
fonte
2

Ti consigliamo di utilizzare solo un metodo per aggiungere / rimuovere utenti nei gruppi. Per semplificare, in un'API di design ben progettato dovrebbe esserci solo un percorso per raggiungere ogni azione . Inoltre, quel percorso dovrebbe essere il più breve possibile.

Ora scegli quale è il percorso giusto ( PUT /users/{idu}/groups/{idg} o PUT /groups/{idg}/users/{idu} ). Dipende da te, ma preferirei usare il secondo. Perché è la risposta di chi possiede chi? O cosa è composto da cosa?

Non è una risposta dogmatica, potrebbe esserci un motivo per scegliere il primo, specialmente se consideri che essere nel gruppo è proprietà dell'utente.

    
risposta data 24.10.2014 - 11:41
fonte

Leggi altre domande sui tag