Так что ничего нового здесь, я просто пытаюсь получить некоторые разъяснения и, похоже, не могу найти ничего в других сообщениях.
Я создаю новый ресурс повторно, говорю:
/books (POST)
с телом:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Я знаю, что должен вернуть 201 (Created) с заголовком Location нового ресурса:
Location: /books/12345
Вопрос, на который я не могу ответить сам, заключается в том, что сервер должен вернуть в теле.
Я часто делал такой тип ответа:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Я сделал это по нескольким причинам:
- Я написал API для рамок переднего конца, как angularjs. В моем конкретном случае я использую угловые ресурсы, и мне часто нужен только идентификатор ресурса, чтобы найти его. Если я не вернул идентификатор в теле ответа, мне нужно было бы проанализировать его из заголовка Location.
- В GET всех книг я обычно возвращаю весь объект, а не только идентификатор. В этом смысле мой клиентский код не должен различать, откуда взять идентификатор (заголовок местоположения или тело).
Теперь я знаю, что я действительно нахожусь в серой зоне, но большинство людей говорят, что возвращать весь ресурс - это «плохая» практика. Но что, если сервер изменяет / добавляет информацию к ресурсу. Это определенно добавляет идентификатор, но может также добавить другие вещи, такие как отметка времени. В случае, если я не возвращаю весь ресурс, действительно ли лучше сделать POST, вернуть идентификатор, а затем заставить клиента выполнить GET для получения нового ресурса.