Quando costruisci un servizio REST, provo a concentrarmi sull'oggetto in questione e ad usare il JSON per rappresentare la struttura dei dati.
In questo esempio, l'oggetto da modificare è il gruppo. Lo metterei alla base dell'URI e non farlo seppellire nel mezzo.
/api/groups/{groupId}
Questo dovrebbe essere valido perché gli ID di gruppo ( si spera ) sono unici all'interno dell'applicazione.
La prossima è la domanda su come aggiornare i membri.
Immagino un JSON che assomigli a qualcosa del tipo:
{
"groupId": "1111",
"groupName": "A Group",
"ownerId": "2222",
"membersIds": [ "2222", "3333", "4444" ]
}
La prima opzione sarebbe quella di PUT l'intero oggetto.
PUT /api/groups/1111
{
"groupId": "1111",
"groupName": "A Group",
"ownerId": "2222",
"membersIds": [ "2222", "3333", "4444" ]
}
Questa è una semplice API. Un client utilizza un GET per ottenere i dati correnti, apportare modifiche, quindi inserire il risultato. Spetterebbe al server convalidare l'aggiornamento nel suo insieme o rifiutare l'aggiornamento nel suo complesso se c'è qualche errore.
Capisco che questo potrebbe non essere sempre auspicabile, quindi potrei capire di volere un collegamento che aggiornerebbe solo i membri.
A tal fine ecco la scorciatoia per i membri:
/api/groups/{groupId}/members
con il JSON corrispondente:
[ "2222", "3333", "4444" ]
Questo sarebbe ancora un PUT perché stai aggiornando i dati esistenti.
PUT /api/groups/1111/members
[ "2222", "3333", "4444" ]
Il PUT sostituisce tutti i membri correnti con i membri dell'array. I membri attuali potrebbero essere richiesti con GET /api/groups/1111/members
. Sarebbe responsabilità del cliente aggiungere nuovi membri ai membri correnti.
Questo non è ancora quello che hai chiesto. Vuoi un collegamento per aggiungere semplicemente membri. Qui il mio metodo si rompe. Non si sta utilizzando l'URI per rappresentare la struttura dei dati, si sta utilizzando l'URI per eseguire un'azione con i dati. Questo non è molto RESTful (IMHO), ma molte persone lo fanno.
In passato, ho utilizzato i parametri CGI per mostrare esplicitamente un'azione.
/api/groups/{groupId}?action=addMembers
Finalmente arriviamo a qualcosa che assomiglia a quello che hai chiesto.
POST /api/groups/1111?action=addMembers
[ "3333", "4444"]
Per me, non sembra molto RESTful, ma l'utilità supera l'ideologia e se questo è esattamente ciò di cui hai bisogno, allora eccolo qui.