Глаголы REST - какая конвенция “корректна”

Я хорошо в реализацию сервиса REST (на платформе Windows CE, если это имеет значение), и я начал использовать общие определения IBM использования POST для создания (ВСТАВЛЯЕТ) и ПОМЕЩЕННЫЙ для обновления.

Теперь я натыкался на определения Sun, которые являются точно противоположным. Таким образом, мой вопрос, который является "общепринятым" определением? Или есть ли даже один?

20
задан ctacke 15 March 2010 в 14:06
поделиться

6 ответов

Недостатком использования PUT для создания ресурсов является то, что клиент должен предоставить уникальный идентификатор , который представляет объект, который он создает. Хотя обычно клиент может сгенерировать этот уникальный идентификатор, большинство разработчиков приложений предпочитают, чтобы их серверы (обычно через свои базы данных) создавали этот идентификатор. В большинстве случаев мы хотим, чтобы наш сервер контролировал создание идентификаторов ресурсов. Так что же нам делать? Мы можем переключить на использование POST вместо PUT.

Итак: Поместите = ОБНОВЛЕНИЕ

Сообщение = ВСТАВИТЬ

20
ответ дан 29 November 2019 в 23:11
поделиться

Здесь http://www.w3.org/Protocols/rfc2616/rfc2616.html - это официальное руководство по реализации поведение методов HTTP.

2
ответ дан 29 November 2019 в 23:11
поделиться

Причина использования POST как INSERT и PUT как UPDATE заключается в том, что POST является единственная неидемпотентная и небезопасная операция согласно HTTP. Идемпотентность означает, что независимо от того, сколько раз вы применяете операцию, результат всегда один и тот же. В SQL INSERT - единственная неидемпотентная операция, поэтому ее следует отображать на POST. UPDATE является идемпотентным, поэтому его можно сопоставить с PUT. Это означает, что одна и та же операция PUT / UPDATE может применяться более одного раза, но только сначала изменится состояние нашей системы / базы данных.

Таким образом, использование PUT для INSERT нарушит семантическое требование HTTP, согласно которому операция PUT должна быть идемпотентной.

16
ответ дан 29 November 2019 в 23:11
поделиться

Мы используем POST = Create, PUT = Update.

Почему? Нет веской причины. Нам нужно было выбрать одно, и это тот выбор, который я сделал.

Отредактируйте . Глядя на другие ответы, я понимаю, что решение может быть решено по ключевой проблеме создания.

Мы РАЗБИРАЕМ новые записи и возвращаем объект JSON со сгенерированным ключом. Похоже, это больше подходит для общепринятой семантики POST.

Мы помещаем в существующие записи полный URI, который идентифицирует объект.

2
ответ дан 29 November 2019 в 23:11
поделиться

Глаголы:

GET {path} : Получить ресурс с идентификатором {path} .

PUT {путь} : Создать или обновить ресурс с идентификатором {путь} .

УДАЛИТЬ {путь} : Удалить ресурс с идентификатором {путь} .

POST {путь} : Вызов действия, которое определяется как {путь} .

Когда намереваются создать новый ресурс, мы можем использовать PUT , если мы знаем, каким должен быть идентификатор ресурса, и мы можем использовать POST , если хотим, чтобы сервер для определения идентификатора нового ресурса.

6
ответ дан 29 November 2019 в 23:11
поделиться

PUT может использоваться для создания, когда сервер предоставляет клиенту контроль над частью своего пространства URI. Это эквивалентно созданию файла в файловой системе: когда вы сохраняете в файл, который еще не существует, вы создаете его, и если этот файл существует, результатом будет обновление.

Однако PUT лишен возможности неявного намерения клиента. Рассмотрим размещение заказа: если вы PUT на /orders/my-new-order, то смысл может быть только в обновлении ресурса, идентифицированного /orders/my-new-order, тогда как POST /orders/ может означать "разместить новый заказ", если принимающий POST ресурс имеет соответствующую семантику.

То есть, если вы хотите добиться чего-либо в качестве побочного эффекта создания нового ресурса, вы должны использовать POST.

Jan

5
ответ дан 29 November 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: