Я достаточно знаком с REST, чтобы признать, что использование POST для достижения DELETE является отклонением от соответствия REST. Я не могу точно указать причину, по которой это хорошее правило.
Я подозреваю, что это может быть связано с осуществимостью API-независимого инструментария (например, инструмента dev, который делает такие предположения о состоянии реализации, основываясь на данных об определениях глаголов, без необходимости конфигурирования, чтобы понять, что определенные методы API) или невозможность вернуть мелкозернистые ошибки в случае частичного успешного удаления, но это всего лишь предположения, которые не имеют решающего значения в этом вопросе.
Ответ Сванлю относится к использованию URL-адресов, представляющих конструкцию группировки в качестве цели удаления, но в приведенном примере «/ users / expired» предлагается фиксированная (и, возможно, определяемая системой) группировка. Более ориентированный на пользователя случай произвольной коллекции все еще требует перечисления в какой-то момент для достижения.
Выдача N УДАЛЕНИЙ для группы размера N не является привлекательной, как из-за сложной задержки, так и из-за отсутствия атомарности, но УДАЛЕНИЕ ОСТАЛОСЬ может предназначаться только для одного ресурса.
Я думаю, что лучшая практика, подразумеваемая ответом Сванлиу, могла бы состоять в определении операции POST, способной создать ресурс, который станет новым родительским объектом содержания для удаляемых объектов. POST может вернуть тело, поэтому рассматриваемая система может создать уникальный идентификатор для этого ресурса, не относящегося к доменной группировке, и вернуть его клиенту, который может развернуться и выдать второй запрос на УДАЛЕНИЕ. Ресурс, созданный POST, является недолговечным, но целенаправленным - это каскады прекращения действия к объектам домена, которые были желаемой целью операции массового удаления.
> POST /users/bulktarget/create
> uid=3474&uid=8424&uid=2715&uid=1842&uid=90210&uid=227&uid=66&uid=54&uid=8
> ...
< ...
< 200 OK
< ae8f2b00e
> DELETE /users/bulktarget/ae8f2b00e
> ...
< ...
< 200 OK
Конечно, два сетевых обмена менее желательны, чем просто один, но, учитывая, что меньшее массовое удаление - это два объекта, и для его выполнения потребуется две операции DELETE, это кажется справедливым компромиссом - думайте об этом, как о вас » каждый объект, за исключением второго, становится бесплатным.