2011-02-10 2 views
6

Возможно ли такое? Разве люди, которые проектировали REST, просто думали, что будут удалять вещи по одному за раз?REST - Удаление коллекции объектов

Так скажу, у меня есть ID 10 Foo в 1-10

Я хочу удалить идентификаторы 3, 6 и 9 с одним HTTP DELETE вызова.

Есть ли я, я могу это сделать, не оскорбляя Папу?

ответ

-1

Если вы обеспокоены тем, оскорбляя папа, может быть, вы должны потратить некоторое время на чтение Писания :-) http://tools.ietf.org/html/draft-gregorio-uritemplate-04

Я думаю, что все ваши вопросы будут даны ответы там.

+3

Не могли бы вы указать точное место в вышеупомянутом документе, отвечая на вопрос OP? – mark

+0

@mark Посмотрите на все примеры расширения, которые используют пример переменной 'list'. Существует множество способов расширения нескольких значений в шаблоне URI. http://tools.ietf.org/html/rfc6570 –

+0

@DarrelMiller так разделены запятыми ключами в стиле поля формы? следует ли исключить транзакции с двумя типами состояний: успех, сбой? (то есть без частичного успеха) –

0

Я не думаю, что это проблема.

DELETE http://www.example.com/foos означает удалить все.

УДАЛИТЬ http://www.example.com/foos {3,6,9} означает удаление Foo 3, 6, 9.

+1

Являются ли эти скобки {#, #, #} частью стандарта? Я этого раньше не видел. –

+0

Это обычная часть URI. Любой сбор ресурсов и ресурсов может быть представлен с помощью URI, вы можете предоставить семантику URI. – Dagang

+2

@ Потребите дополнительные данные в URI, как будто это выглядит грязно, не хотите ли вы отправлять данные для фактического удаления внутри тела запроса? Это то, что я серьезно рассматриваю для системы, в которой случай использования по умолчанию будет состоять из нескольких удалений. Я также намерен просто называть «DELETE/foos» без тела «недействительным» действием. – thecoshman

5

Большинство API, я знаком с не позволяют удаление нескольких лиц одновременно, но для выполнения других операций несколько объектов с параметрами URL, такими как ?id=3,6,9 или ? id=3&id=6&id=9. Поэтому было бы достаточно часто, чтобы сделать одно из следующих действий:

DELETE /foos?id=3,6,9 

или

DELETE /foos?id=3&id=6&id=9 
+1

Просто имейте в виду, что такой вызов не приведет к аннулированию кешированные копии '/ foo/3','/foo/6' и '/ foo/9'. – fumanchu

+1

@fumanchu Но это было бы для клиента, чтобы это знать. Кроме того, если клиент не удаляет элементы отдельно, то есть, если они использовали некоторые для ресурса сбора, у отдельных ресурсов были бы устаревшие кеши. Но устаревшие кеши - это просто часть Интернета. – thecoshman

+0

Я также хотел бы указать, что вы можете просто отправить полезную нагрузку в тело запроса на удаление, которое может быть использовано для детализации того, что именно нужно удалить. – thecoshman