Правильна відповідь на вставку REST - повний новий запис або просто значення id запису?


15

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

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

Чи слід відповідати повним об'єктом? (наприклад, та сама відповідь, яку вони отримають із запиту "GET / object_type / 1234")

Чи слід відповідати лише новим значенням ідентифікатора? (наприклад, "{id: 1234}", це означає, що якщо вони хочуть отримати весь запис, їм потрібно зробити додатковий запит HTTP GET, щоб отримати повний запис)

Заголовок переспрямування, який вказує їх на URL-адресу для повного об’єкта?

Щось ще цілком?


Я впевнений у найкращій практиці, але для мене особисто я б, мабуть,
подумав

Відповіді:


13

Ну, в інтерфейсі REST, дотримуючись HTTP, коли це можливо, я б повернув 201 та URI у полі заголовка Location новоствореному ресурсу. Ось що говорить визначення статусного коду :

10.2.2 201 Створено

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

Якщо щось пішло не так, я б стверджував, що ви не повинні повертатися так, -1як казали інші, а просто код помилки клієнта або сервера (4xx або 5xx). Наприклад, якщо користувачеві не дозволяється створювати якийсь новий ресурс, ви просто повернете "401 Несанкціонований", нічого більше і нічого менше.


Що з тілом? порожній або весь новостворений об’єкт у відповідь?
Розробник

Дві загальні варіанти, про які я знаю, - це 1) встановлення заголовка місцеположення, де можна знайти нову сутність, або 2) включення нового об'єкта в тілі. Я особисто йду з останнім з практичних причин. Інколи поєднуються для більш спокійного почуття;)
Бруно Шепер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.