204 No Content
є популярною відповіддю для DELETE
та інодіPUT
.
Однак, якщо ви впроваджуєте HATEOAS, повернення a 200 OK
із посиланнями для переходу може бути більш ідеальним. Це тому, що HATEOAS REST API забезпечує контекст для клієнта. Подумайте, куди переходить користувацька програма після успішного видання команди видалення. Ось короткий уривок статті з додатковим обговоренням цього питання. Дивіться статтю блогу для більш повного обговорення.
Уникайте 204 відповідей, якщо ви створюєте додаток HATEOAS.
Це урок про дизайн REST API, який я вивчив під час створення нетривіальних REST API. Щоб максимально підтримати клієнта, REST API не повинен повертати 204 відповідей (без вмісту).
З точки зору служби, відповідь 204 (без вмісту) може бути цілком дійсною відповіддю на запит POST, PUT або DELETE. Зокрема, для запиту DELETE це видається дуже доречним, адже що ще ви можете сказати?
Однак, з точки зору належного клієнта, який знає HATEOAS, відповідь 204 є проблематичною, оскільки немає посилань для переходу. Коли гіпермедіа діє як двигун стану програми, коли немає посилань, немає стану. Іншими словами, відповідь 204 відкидає весь стан програми.
Ця стаття охоплює POST
, PUT
, DELETE
і GET
. Ось конкретна дискусія щодо DELETE
:
Відповідаючи на запити DELETE
Запит DELETE представляє намір видалити ресурс. Таким чином, якщо служба успішно обробляє запит DELETE, що ще вона може зробити, ніж повернення 204 (Без вмісту)? Адже ресурс щойно видалено.
Ресурс часто є членом колекції або іншим чином "належить" контейнеру. Як приклад, http://foo.ploeh.dk/api/tags/rock представляє тег "рок", але інший спосіб розглянути його полягає в тому, що ресурс / rock міститься в контейнері тегів (який сам є ресурс). Це повинно бути знайоме користувачам Atom Pub.
Уявіть, що ви хочете видалити ресурс http://foo.ploeh.dk/api/tags/rock . Для досягнення цієї мети ви подаєте проти неї запит DELETE. Якщо ваш клієнт повертає собі 204 (без вмісту), він просто втрачає контекст. Куди це звідти йде? Якщо ви не тримаєте інформацію про клієнта, ви не знаєте, звідки ви прийшли.
Замість того, щоб повернути 204 (Без вмісту), API повинен бути корисним та пропонувати місця для відвідування. У цьому прикладі, я думаю, одне очевидне посилання - http://foo.ploeh.dk/api/tags - контейнер, з якого клієнт щойно видалив ресурс. Можливо, клієнт хоче видалити більше ресурсів, тож це буде корисним посиланням.