REST API PATCH Запрос ожидаемого поведения - PullRequest
0 голосов
/ 26 сентября 2018

Я не уверен, каково будет ожидаемое поведение для следующих сценариев:

PATCH Request 1:

"body": {
    "un_updatable_field" : "data" 
}

Так что здесь я просто выброшу исключение: Field cannot be updated, без разницы.

PATCH Request 2:

"body": {

    "all_required_fields" : "all",
    "un_updatable_field" : "data" 
}

Что мне здесь делать?Бросить исключение и не обновлять модель?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Patch операции должны быть атомарными, согласно спецификации :

Сервер ДОЛЖЕН применять весь набор изменений атомарно и никогда не предоставлять (например, в ответ наПОЛУЧИТЬ во время этой операции) частично измененное представление.Если весь документ исправления не может быть успешно применен, то сервер НЕ ДОЛЖЕН применять какие-либо изменения.Определение того, что представляет собой успешный PATCH, может варьироваться в зависимости от документа исправления и типа изменяемого ресурса (-ов).Например, общая утилита 'diff' может генерировать патч-документ, который применяется к нескольким файлам в иерархии каталогов.Требование атомарности выполняется для всех непосредственно затронутых файлов.См. «Обработка ошибок», Раздел 2.2 , для получения подробной информации о кодах состояния и возможных условиях ошибки.

Похоже, что ваш конкретный случай будет

Необработанный запрос: может быть указан с ответом 422 (Unprocessable Entity) ( [RFC4918], Раздел 11.2 ), когда сервер понимает документ исправления и синтаксис документа исправления представляется действительным, ноСервер не может обработать запрос.Это может включать попытки изменить ресурс таким образом, чтобы ресурс стал недействительным;например, модификация правильно сформированного XML-документа, которая больше не будет правильно формироваться.Также могут быть более конкретные ошибки, такие как «Конфликтующее состояние», которые могут быть переданы с помощью этого кода состояния, но более конкретная ошибка, как правило, будет более полезной.

a 409 Conflict также может быть целесообразным,в зависимости от причины, ресурс не может быть изменен.

0 голосов
/ 26 сентября 2018

Я предполагаю, что un_updateable_field - это поле, существующее в вашей системе, но вы не хотите, чтобы люди могли его обновлять.

Вы можете игнорировать его или можете выбратьвыбросить ошибку.Что вы должны сделать, зависит от вас.Я предпочитаю, чтобы мои системы были строгими и не игнорировали недопустимые значения, потому что, если появляется недопустимое значение, это может указывать на наличие ошибки где-то, и лучше получить серьезную ошибку, чтобы вы могли исправить эту ошибку.

...