Portanto, nada de novo aqui, estou apenas tentando obter algum esclarecimento e parece que não consigo encontrar nenhum em outros posts.
Estou criando um novo recurso com repulsa, digamos:
/books (POST)
com um corpo:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Eu sei que devo retornar um 201 (criado) com um cabeçalho de localização do novo recurso:
Location: /books/12345
A pergunta que não consigo responder por mim mesma é o que o servidor deve retornar no corpo.
Eu sempre fiz esse tipo de resposta:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Eu fiz isso por alguns motivos:
- Eu escrevi api para estruturas de front-end como angularjs. No meu caso particular, estou usando recursos angulares e geralmente preciso apenas da identificação do recurso para localizá-lo. Se eu não retornasse o ID no corpo da resposta, seria necessário analisá-lo no cabeçalho Location.
- Em um GET de todos os livros, geralmente retorno o objeto inteiro, não apenas o ID. Nesse sentido, meu código de cliente não precisa diferenciar de onde obter o ID (cabeçalho ou corpo do local).
Agora eu sei que estou realmente na área cinzenta aqui, mas a maioria das pessoas está dizendo que devolver todo o recurso é uma prática 'ruim'. Mas e se o servidor alterar / adicionar informações ao recurso. Definitivamente adiciona o ID, mas também pode adicionar outras coisas, como um carimbo de data / hora. No caso de eu não retornar o recurso inteiro, é realmente melhor fazer um POST, retornar o ID e fazer com que o cliente execute um GET para obter o novo recurso.