Quindi niente di nuovo qui sto solo cercando di ottenere alcuni chiarimenti e non riesco a trovarne nessuno in altri post.
Sto creando una nuova risorsa in modo irrequieto, ad esempio:
/books (POST)
con un corpo:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
So che dovrei restituire un 201 (creato) con un'intestazione Location della nuova risorsa:
Location: /books/12345
La domanda a cui non riesco a rispondere da solo è cosa dovrebbe restituire il server nel corpo.
Ho spesso fatto questo tipo di risposta:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
L'ho fatto per un paio di motivi:
- Ho scritto api per framework front-end come angularjs. Nel mio caso particolare sto usando risorse angolari e spesso ho bisogno solo dell'id per la risorsa per individuarlo. Se non restituissi l'id nel corpo della risposta, dovrei analizzarlo dall'intestazione Location.
- In un GET di tutti i libri di solito restituisco l'intero oggetto non solo l'ID. In questo senso il mio codice cliente non deve differenziare da dove ottenere l'id (intestazione o corpo della posizione).
Ora so di essere davvero nell'area grigia qui, ma la maggior parte delle persone sta dicendo che restituire l'intera risorsa è una pratica "cattiva". Ma cosa succede se il server modifica / aggiunge informazioni alla risorsa. Aggiunge sicuramente l'id, ma potrebbe anche aggiungere altre cose come un timestamp. Nel caso in cui non restituisca l'intera risorsa, è davvero meglio fare un POST, restituire l'id, quindi fare in modo che il client esegua un GET per ottenere la nuova risorsa.