Рассмотрим два варианта:
Вариант 1. Один метод обновления, но он должен принимать полное представление DTO. Если пользователь обновляет 1 значение, все немодифицированные значения включаются. В вашем примере, как вы ожидаете, что клиент сможет сообщить серверу «Установите это значение на #null»?
Вариант 2: Организовать API в действиях. Часто клиент не может обновить каждую деталь в объекте. Они могут выполнять действия, которые приводят к обновлению некоторых полей. Действие «PrintBox» или «UpdateBoxLabel» может либо явно, либо неявно обновить одно из них, либо выбрать несколько свойств для объекта блока.
Преимущество варианта 2 состоит в том, что он явно разбивает вещи, но это приводит к большему количеству кода, но простому коду в вашем API. Проблема с вариантом 1 состоит в том, что в большинстве случаев у клиента не должно быть разрешений бланширования корзины для изменения чего-либо и всего в сущности. Ваш клиентский код может позволять обновлять только некоторые детали, записывать их в DTO и отправлять на сервер, но ваш сервер должен абсолютно проверять, обновляются ли только допустимые значения и являются ли они действительными. Веб-запросы могут быть перехвачены пользователем в браузере или даже вредоносными плагинами, которые могут подделать данные до того, как сервер их получит. С вариантом 2 вам все еще нужно проверить, но занимаемая площадь намного меньше.
Например, с вариантом 2, если у вас есть действие с именем «PrintBoxLabel (boxId)», это действие может (в качестве примера): - Утверждение, что запись о boxId существует. - Утверждать, что текущий сеанс пользователя имеет доступ к этому полю. - Подготовьте PDF / отчет для ярлыка коробки. - Получить идентификатор пользователя из текущего сеанса и обновить значение LastPrintedBy записи Box и значение LastPrintedOn. - Верните PDF.
Вместо вызова клиента для печати, затем вызовите метод "UpdateBox". В предыдущем примере просто нужен идентификатор Box, остальное происходит из сеанса сервера. Если вы действительно хотите отправить данные с клиента, методы API предназначены для принятия только тех данных, которые разрешено обновлять, их проверки, а затем выполнения соответствующих действий. Система менее уязвима для неожиданного вмешательства.