API Обновление массива в свойстве объекта: нужно ли отправлять массив идентификаторов или полный объект? - PullRequest
0 голосов
/ 04 декабря 2018

Для проекта у нас есть класс с именем Item.

Этот Item имеет ID, Title, Description и MediaFile[].Теперь у нас есть функция редактирования, в которой мы можем изменить заголовок, описание и добавить / удалить MediaFile.Добавление MediaFile выполняется путем отправки файла на сервер, который возвращает Filename и Id.

Когда мы хотим положить измененный Item, наш бэкэнд хочет иметь другую модель, содержащую только ID, Title, Description и массив, содержащий идентификаторы MediaFile Guid[].Это требует дополнительного «преобразования» в нашем интерфейсе с MediaFile[] до Guid[].Разве не имеет смысла отправлять полный обновленный Item, как мы его получили с GET?

Короче говоря : для коллекций в классе следуетВы отправляете полный массив классов или массив, содержащий только идентификаторы классов?

1 Ответ

0 голосов
/ 04 декабря 2018

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

  • PUT, представляющим все представление Item-resource, содержащее коллекцию ссылочных MediaFiles, в API
  • Proroductionнесколько внутренних вызовов, каждая из которых создает ссылку между ресурсом Item и ссылочным мультимедийным файлом.

Первый подход действует как одна операция, гарантируя большую согласованность, но имеет все недостатки массового внутреннего вызова: в случае сбояТрудно определить, провалился ли весь тест или он частично удался.Кроме того, если эта пакетная обработка занимает разумное время - пользователь остается заблокированным до конца запроса (я имею в виду, что вы не можете создать пользовательский интерфейс с отчетами о ходе выполнения).Это сценарий "все или ничего"

Буква 1 (несколько запросов) добавляет отдельный ресурс для связи и производит дополнительные внутренние вызовы, но более удобна для пользователя и позволяет более ответственному пользовательскому интерфейсу.Вы можете уведомлять пользователя о состоянии и ходе выполнения пакетной операции и, кроме того, обрабатывать сбои один за другим (например, применить политику повторных попыток).

Другими словами:

Подход с использованием зависимых ресурсов:

PUT /items Body: {... MediaFile: [...]}

Несколько звонков:

PUT /items Body: {...}
PUT /items/{itemId}/mediafiles/{mediaFileId} Body:{ ... MediaFileReosurse1 }
PUT /items/{itemId}/mediafiles/{mediaFileId} Body:{ ... MediaFileReosurse2 }
...
PUT /items/{itemId}/mediafiles/{mediaFileId} Body:{ ... MediaFileReosurseN }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...