Каково стандартное поведение, ожидаемое от PUT с неполным представлением ресурса?
Например, у меня есть User
в /api/users/1
, который представлен HAL json ниже:
{'id': 1,
'username': 'joedoe',
'email': '[email protected]',
'password_hash': '9039dmk38f84uf4029i339kf32f0932i',
'last_visit': '2013-11-04 21:09:01',
'public': true,
'_links': {'self': {'href': 'http://foo.bar.com/api/users/1'}}
}
Затем я делаю запрос PUT для изменения username
и email
, а в представлении отсутствуют другие атрибуты:
PUT /api/users/1
{'username': 'joeydoey',
'email': '[email protected]'}
До сих пор я всегда предполагал, что это следует рассматривать как ошибку, потому что это подразумевает частичное обновление, но этот ответ заставлял меня задуматься об этом, и это имеет смысл сказать, что неполное представление по-прежнему является полной заменой, что дает серверной свободе заполнять пробелы по умолчанию.
Я не могу найти что-либо, что я мог бы связать с этим по стандарту HTTP, поэтому я должен спросить, что ожидаемое стандартизованное поведение в этом случае?
-
Это должно привести к ошибке, поскольку это подразумевает частичное обновление. Схема полезной нагрузки PUT должна быть идентична схеме, полученной с помощью GET, с тем же ресурсом и типом носителя.
-
Это должно быть успешным, потому что сервер может заполнить пробелы по умолчанию для этого типа носителя. В этом случае он будет reset пароль пустым или стандартным паролем и соответствующим образом обновит хеш, и установите значения last_visit и public values в значения по умолчанию. Этот параметр имеет гораздо больший смысл, если вы рассматриваете HATEOAS, если клиент отправляет тот же тип носителя, который возвращается сервером, поскольку он не может предсказать, как будут изменяться элементы управления гипермедиа, представление обязательно является неполным каждый раз, когда клиент не является 't отправка всех гиперссылок, и сервер должен reset их соответственно.
-
И 1 и 2 действительны, потому что нет стандартизованного поведения, и это зависит от типа носителя, чтобы решить, что с ним делать. Это не так, потому что PUT не подчиняется самому ресурсу, а заменяет его.
Имейте в виду, что я не спрашиваю, что правильно или что имеет смысл. Я спрашиваю, какой из них поддерживается стандартами.