Мені було цікаво, що думка людей стосується PUT
операції RESTful, яка нічого не повертає (нульового) в тілі відповідей.
Мені було цікаво, що думка людей стосується PUT
операції RESTful, яка нічого не повертає (нульового) в тілі відповідей.
Відповіді:
Специфікація HTTP ( RFC 2616 ) містить ряд рекомендацій, що застосовуються. Ось моя інтерпретація:
200 OK
для успішного PUT оновлення наявного ресурсу. Орган з реагуванням не потрібен. (Відповідно до розділу 9.6 , 204 No Content
це навіть більше.)201 Created
для успішного PUT нового ресурсу з найбільш специфічним URI для нового ресурсу, що повертається у полі заголовка Location та будь-якими іншими відповідними URI та метаданими ресурсу, відлунюваних у тілі відповіді. ( Розділ 10.2.2 RFC 2616 )409 Conflict
для PUT, який невдалий через модифікацію третьої сторони, зі списком відмінностей між спробою оновлення та поточним ресурсом в тілі відповіді. ( RFC 2616 Розділ 10.4.10 )400 Bad Request
для невдалого PUT з текстом на природній мові (наприклад, англійською) в органі відповіді, який пояснює, чому PUT не вдалося. ( RFC 2616 Розділ 10.4 )No response body needed
стосовно 200. Насправді орган реагування взагалі не згадується стосовно PUT. У ньому зазначено лишеIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
На відміну від більшості відповідей тут, я фактично вважаю, що PUT повинен повернути оновлений ресурс (крім коду HTTP, звичайно).
Причина, чому ви хочете повернути ресурс як відповідь на операцію PUT, полягає в тому, що, коли ви відправляєте представлення ресурсу на сервер, сервер також може застосувати деяку обробку до цього ресурсу, тому клієнт хотів би знати, як працює цей ресурс виглядають після успішного виконання запиту. (інакше доведеться видати ще один GET-запит).
Я думаю, що сервер може повернути вміст у відповідь на PUT. Якщо ви використовуєте формат огинаючої відповіді, який дозволяє отримувати завантажені дані (наприклад, формат, споживаний ember-даними), ви можете також включати інші об'єкти, які, можливо, були змінені через тригери бази даних тощо. # запитів, і це здається прекрасним місцем для оптимізації.)
Якщо я просто приймаю PUT і не маю нічого доповідати, я використовую код статусу 204 без тіла. Якщо я маю щось повідомити, я використовую код статусу 200 і включаю тіло.
Специфікація HTTP / 1.1 (розділ 9.6) обговорює відповідні коди відповідей / помилок. Однак він не стосується вмісту відповіді.
Що б ви очікували? Простий код відповіді HTTP (200 тощо) здається мені простим і однозначним.
Якщо резервним інтерфейсом API REST є реляційна база даних SQL, то
Якщо вас не хвилюють втрачені оновлення або ви хочете змусити своїх клієнтів робити GET відразу після PUT, тоді нічого не повертайте з PUT.
Код відповіді Http 201 для "Створено" разом із заголовком "Місцезнаходження", щоб вказати, де клієнт може знайти щойно створений ресурс.
Я використовував RESTful API у своїх службах, і ось моя думка: Спочатку ми повинні дійти до загального вигляду: PUT
використовується для оновлення ресурсу, який не створює та не отримує.
Я визначив ресурси за допомогою: Stateless resource
і Stateful resource
:
Ресурси без громадянства Для цих ресурсів достатньо повернути HttpCode з порожнім тілом, досить.
Державні ресурси Наприклад: версія ресурсу. Для цього типу ресурсів ви повинні надати версію, коли хочете змінити її, тому поверніть повний ресурс або поверніть версію клієнту, тому клієнту не потрібно надсилати запит на отримання після операції оновлення.
Але , для служби або системи, зберегти йогоsimple
,clearly
,easy to use and maintain
це найголовніше.
Так само, як порожній орган запиту відповідає початковій меті запиту GET, а порожній орган відповіді відповідає початковій меті запиту PUT.
здається нормальним ... хоча я думаю, що рудиментарний показник успіху / провалу / опублікованого часу / # отриманих байтів / тощо. було б кращим.
редагувати: я розмірковував відповідно до цілісності даних та / або зберігання записів; метадані, такі як хеш MD5 або мітка часу за отриманий час, можуть бути корисними для великих файлів даних.
Існує різниця між заголовком і тілом HTTP-відповіді. PUT ніколи не повинен повертати тіло, але повинен повертати код відповіді у заголовку. Просто виберіть 200, якщо це було успішно, і 4xx якщо ні. Немає такого поняття, як нульовий код повернення. Чому ти хочеш це робити?
200
PUT, DELETE або будь-якого іншого методу. Я щось пропустив? Такі як Mozilla, що стає босом W3 та IETF? ;) Або, можливо, вони просто ніколи не чули про принцип стійкості Постеля.