Pensando in modo RESTful, è corretto utilizzare POST per creare in una singola chiamata una risorsa e la relativa sotto-risorsa? Nella mia applicazione ho la risorsa /notices/{notice}
e la sotto-risorsa /notices/{notice}/photos/{photo}
. Un {photo}
non può esistere senza un {notice}
, ma un {notice}
non ha necessariamente foto. Normalmente, devo prima fare un POST per creare un avviso, poi un altro POST per aggiungere una foto.REST - Creazione di risorse annidate con singolo POST
Ora voglio consentire la creazione di un avviso con una foto direttamente allegata, consentendo la creazione di /notices/{notice}
e /notices/{notice}/photos/{photo}
con una singola richiesta POST a/avvisi/{notice}/foto/{foto}, con un contenuto multipart descrivendo entrambe le risorse (JSON per avviso, binario per la foto). Penso che restituirò l'intestazione Location solo per la sotto-risorsa.
In sostanza, voglio che questo impedisca ai client Android di inviare due richieste POST al server per caricare un avviso con una foto. È corretto? O viola i principi REST? Devo considerare di tenerli separati e fare due richieste diverse? O è sbagliato considerare le foto come entità separate dall'avviso? Devo conservare solo /notices/{notice}
come risorsa, utilizzando PUT per aggiungere foto?
Qual è la soluzione migliore?
Sicuramente da quella logica, tutto dopo l'endpoint sarebbe una modifica della risorsa root e quindi rendere l'idea di 'POST' ridondante? (Forse ti ho frainteso?) – James
In teoria, sì. Puoi pensare a/domande come sotto risorsa di stackoverflow.com. Ciò tuttavia non rende POST ridondante. –
Direi che l'uso di 'POST' sarebbe l'unica opzione sensata qui in quanto l'OP non sta modificando la maggior parte delle risorse (direttamente)? Creare la risorsa con un 'PUT' implica che questa sotto-risorsa esiste già? – James