Правильный ответ для вставки REST - полная новая запись или просто значение идентификатора записи?

15

Я создаю REST API, который позволяет вставлять (POST, не идемпотент) и обновлять (PUT, идемпотент) запросы на добавление / обновление базы данных для нашего приложения.

Мне интересно, есть ли какие-либо стандарты или лучшие практики относительно того, какие данные мы отправляем обратно клиенту в ответ на операцию POST (вставка). Нам необходимо отправить хотя бы значение идентификатора записи (например, ваша новая запись - запись № 1234).

Должны ли мы ответить с полным объектом? (например, по сути тот же ответ, который они получили бы от запроса "GET / object_type / 1234")

Должны ли мы отвечать только новым значением идентификатора? (например, «{id: 1234}», что означает, что если они хотят получить всю запись, им нужно выполнить дополнительный HTTP-запрос GET, чтобы получить полную запись)

Заголовок перенаправления, указывающий на URL для полного объекта?

Что-то еще целиком?

Кит Палмер младший
источник
Я не уверен насчет наилучшей практики, но лично для себя я бы, вероятно, подумал о том, чтобы просто вернуть только что созданный идентификатор, если он будет успешным, иначе -1 и т. Д. Интересно посмотреть, что говорят другие
dreza

Ответы:

13

Хорошо, в интерфейсе REST, следуя HTTP, где это возможно, я бы возвращал 201 и URI в поле заголовка Location вновь созданному ресурсу. Вот что говорится в определениях кода состояния :

10.2.2 201 Создано

Запрос был выполнен и привел к созданию нового ресурса. На вновь созданный ресурс могут ссылаться URI, возвращенные в объекте ответа, с наиболее конкретным URI для ресурса, заданным в поле заголовка Location. Ответ ДОЛЖЕН включать в себя объект, содержащий список характеристик и местоположений ресурсов, из которых пользователь или пользовательский агент может выбрать наиболее подходящий. Формат объекта определяется типом носителя, указанным в поле заголовка Content-Type. Сервер происхождения ДОЛЖЕН создать ресурс перед возвратом кода состояния 201. Если действие не может быть выполнено немедленно, сервер ДОЛЖЕН ответить 202 (Принятым) ответом.

Если что-то пошло не так, я бы сказал, что вам следует возвращаться не так, -1как говорили другие, а просто с кодом ошибки клиента или сервера (4xx или 5xx). Например, если пользователю не разрешено создавать какой-либо новый ресурс, вы просто возвращаете «401 Unauthorized», не более и не менее.

Бруно Шеппер
источник
Как насчет тела? пустой или весь вновь созданный объект в ответ?
Разработчик
Мне известны две распространенные опции: 1) установка заголовка местоположения, в котором можно найти новую сущность, или 2) включение новой сущности в тело. Я лично иду с последним по практическим причинам. Кое-что объединено для более спокойного чувства;)
Бруно Шеппер