"Лучшая" практика для спокойного ответа POST
Так что ничего нового здесь я просто пытаюсь получить некоторые пояснения и не могу найти в других сообщениях.
Я создаю новый ресурс сдержанно, скажем:
/books (POST)
с телом:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Я знаю, что я должен вернуть 201 (создан) с заголовком Location нового ресурса:
Location: /books/12345
Вопрос, на который я не могу ответить сам, - это то, что сервер должен возвращать в теле.
Я часто делал такой ответ:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Я сделал это по нескольким причинам:
- Я написал api для фреймворков front end, таких как angularjs. В моем
В частном случае я использую ресурсы angular, и мне часто нужно просто
идентификатор ресурса, чтобы найти его. Если я не вернул идентификатор в
орган реагирования мне нужно будет разобрать его из местоположения
заголовок.
- В GET всех книг я обычно возвращаю весь объект не только
id. В этом смысле мой клиентский код не должен различать
где получить идентификатор из (заголовок местоположения или тело).
Теперь я сейчас действительно в серой зоне, но большинство людей говорят, что возвращение всего ресурса - это "плохая" практика. Но что, если сервер изменяет/добавляет информацию в ресурс. Он определенно добавляет идентификатор, но может также добавить другие вещи, такие как метка времени. В случае, если я не возвращаю весь ресурс, лучше ли делать POST, возвращать идентификатор, а затем клиент выполняет GET для получения нового ресурса.
Ответы
Ответ 1
Возврат всего объекта к обновлению не будет казаться очень актуальным, но вряд ли можно понять, почему возвращение всего объекта при его создании будет плохой практикой в обычном случае использования. Это было бы полезно, по крайней мере, легко получить идентификатор и получить отметки времени, когда это необходимо.
Это фактически поведение по умолчанию, полученное при создании лесов с помощью Rails.
Я действительно не вижу никакого преимущества возвращать только идентификатор и делать запрос GET после, чтобы получить данные, которые вы могли получить с помощью своего начального POST.
В любом случае, пока ваш API совместим, я думаю, что вы должны выбрать шаблон, который наилучшим образом соответствует вашим потребностям. Не существует правильного способа создания REST API, imo.
Ответ 2
Возврат нового объекта соответствует принципу REST "Унифицированный интерфейс - Манипулирование ресурсами через представления". Полный объект - это представление нового состояния созданного объекта.
Существует отличная ссылка на дизайн API, здесь: Рекомендации по разработке прагматичного API RESTful
Он включает ответ на ваш вопрос здесь: Обновления и создание должны возвращать представление ресурса
В нем говорится:
Чтобы пользователь API не мог снова ударить API обновленное представление, вернуть API обновленный (или созданный) представление как часть ответа.
Кажется красиво прагматичным для меня, и он вписывается в этот принцип REST, о котором я упоминал выше.