Так что здесь ничего нового. Я просто пытаюсь получить разъяснения и не могу найти их в других сообщениях.
Я восстанавливаю новый ресурс, скажем:
/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. В моем конкретном случае я использую ресурсы angular, и мне часто нужен только идентификатор ресурса, чтобы найти его. Если бы я не вернул идентификатор в теле ответа, мне нужно было бы извлечь его из заголовка Location.
- В GET всех книг я обычно возвращаю весь объект, а не только идентификатор. В этом смысле мой клиентский код не должен различать, откуда брать идентификатор (заголовок или тело местоположения).
Теперь я знаю, что я действительно нахожусь здесь в серой зоне, но большинство людей говорят, что возвращение всего ресурса - это «плохая» практика. Но что делать, если сервер изменяет / добавляет информацию к ресурсу. Он определенно добавляет идентификатор, но может также добавлять другие вещи, такие как временная метка. В случае, если я не возвращаю весь ресурс, действительно ли лучше выполнить POST, вернуть идентификатор, а затем попросить клиента выполнить GET для получения нового ресурса.