REST: должна ли конечная точка PUT сравнивать ответ GET перед обновлением?
Ни REST, ни HTTP не накладывают каких-либо особых ограничений на реализацию - ограничена только семантика. RFC 7231
HTTP не определяет точно, как метод PUT влияет на состояние исходного сервера, помимо того, что может быть выражено намерением запроса пользовательского агента и семантикойответ исходного сервера .... Вообще говоря, все детали реализации за интерфейсом ресурсов преднамеренно скрыты сервером.
RFC 7232 может иметь представление о том, кто выищите
Исходный сервер НЕ ДОЛЖЕН выполнять запрошенный метод, если полученное условие If-Match оценивается как ложное;вместо этого сервер происхождения ДОЛЖЕН ответить либо а) кодом состояния 412 (Не выполнено предварительное условие), либо б) одним из кодов состояния 2xx (Успешно), если сервер источника подтвердил, что запрашивается изменение состояния, а окончательное состояние ужеотражено в текущем состоянии целевого ресурса (т. е. изменение, запрошенное пользовательским агентом, уже успешно выполнено, но пользовательский агент может не знать об этом, возможно, из-за того, что предыдущий ответ был потерян или совместимое изменение было сделано каким-то другимuser agent).
Итак, что касается спецификации, вы можете притвориться, что вы что-то изменили, даже если запрет на операции был эквивалентен тому, что просил клиент.
Если я хочу сравнить, как лучше узнать, действительно ли объект был изменен или нет
Недостаточно информации.Это будет зависеть от того, как исходный сервер хранит состояние ресурса.Если вы имеете дело только с необработанными документами, то сравнение двух длинных ключей хеша может быть вполне подходящим.