Я думаю, что нет единой точки зрения, как обычно, это профессия ... Все зависит от ваших потребностей и конкретного сценария.В целом, как вы упомянули, один и тот же результат может быть достигнут двумя методами:
- 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 }