Дополнительно
Удаление нескольких записей с помощью REST
Каков REST-ful способ удаления нескольких элементов?
Мой случай использования заключается в том, что у меня есть коллекция Backbone, в которой мне нужно иметь возможность удалять несколько элементов одновременно. Варианты кажутся следующими:
- Отправить запрос DELETE для каждой отдельной записи (что кажется плохой идеей при наличии потенциально десятков элементов);
- Отправить DELETE, в котором ID'ы, подлежащие удалению, объединены в URL (т.е., "/records/1;2;3");
- Не-REST способом, отправьте пользовательский JSON объект, содержащий ID, помеченные для удаления.
Все варианты менее чем идеальны.
Это похоже на серую зону конвенции REST.
80
5
/records/1;2;3
" - Поэтому ответ 2xx на это может заставить их очистить свой кэш/records/1;2;3
; не очистить/records/1
,/records/2
или/records/3
; проксировать ответ 410 для/records/1;2;3
, или другие вещи, которые не имеют смысла с вашей точки зрения.records=[1,2,3]
в/delete-requests
) и опросе созданного ресурса (указанного в заголовкеLocation
ответа), чтобы узнать, был ли ваш запрос принят, отклонен, находится в процессе выполнения или завершен. Это полезно для длительных операций. Другой способ - послать запросPATCH
к ресурсу списка,/records
, тело которого содержит список ресурсов и действия, которые нужно выполнить над этими ресурсами (в любом формате, который вы хотите поддерживать). Это полезно для быстрых операций, когда код ответа на запрос может указать на результат операции.Всего этого можно достичь, оставаясь в рамках ограничений REST, и обычно ответ заключается в том, чтобы превратить "проблему" в ресурс и дать ему URL.
Так, пакетные операции, такие как удаление здесь, или POST нескольких элементов в список, или внесение одинаковых правок в множество ресурсов, могут быть обработаны путем создания списка "пакетных операций" и POST вашей новой операции в него.
Не забывайте, что REST - это не единственный способ решения любой проблемы. "REST" - это просто архитектурный стиль, и вы не обязаны его придерживаться (но вы потеряете некоторые преимущества интернета, если вы этого не сделаете). Я предлагаю вам просмотреть этот список HTTP API архитектур и выбрать ту, которая вам подходит. Просто осознайте, что вы потеряете, если выберете другую архитектуру, и примите взвешенное решение, основанное на вашем случае использования.
На https://stackoverflow.com/questions/511281/patterns-for-handling-batch-operations-in-rest-web-services есть несколько плохих ответов на этот вопрос, у которых слишком много голосов, но их тоже стоит прочитать.
Если
GET /records?filteringCriteria
возвращает массив всех записей, соответствующих критериям, тоDELETE /records?filteringCriteria
может удалить все такие записи.В этом случае ответом на ваш вопрос будет
DELETE /records?id=1&id=2&id=3
.Я думаю, что хранение в Mozilla SyncStorage служба API В1.5 это хороший способ, чтобы удалить несколько записей, используя остальные.
Удалит всю коллекцию.
Удаление нескольких ОПБ из коллекции с помощью одного запроса.
ИД: удаляет ОПБ из коллекции, чьи идентификаторы в представленной запятую. Более 100 идентификаторов может быть предоставлена.
Удаляет БСО в данном месте.
http://moz-services-docs.readthedocs.io/en/latest/storage/apis-1.5.html#api-instructions
Да, пока у меня только через один API-интерфейс REST, руководство по проектированию, который упоминает пакетные операции (например, удалить): в руководство по проектированию API-интерфейс Google.
Это руководство упоминания Создание и"таможня" и методы, которые могут быть связаны через ресурс, через двоеточие, напр. `https://service.name/v1/some/resource/name:customVerb это также четко указано пакетных операций, как пример:
Так что вы могли бы сделать следующее По данным Google'руководстве по API с:
...чтобы удалить кучу предметов из вашей коллекции ресурсов.
Я'вэ позволил Оптовая замена коллекцию, например, `положить ~/человек/123/обувь-где тело-это всего представления коллекции.
Это работает для небольших коллекций детской пунктов, где клиент хочет рассмотреть детали и чернослив-нибудь и добавить некоторые другие, а затем обновить сервер. Они могли бы поставить пустую коллекцию, чтобы удалить все.
Это означало бы
получить ~/человек/123/обувь/9
останется в кэше, даже если положить его удалил, но это's просто кэширование вопрос, а будет проблема, если другой человек удалил обуви.Мой API данных систем всегда использовать etags в отличие от сроков действия так, чтобы сервер нажмите на каждый запрос, и мне нужна правильная версия/заголовки параллелизма мутировать данных. Для API, которые доступны только для чтения и представления/отчет выравнивается, я использую раз действия для уменьшения ударов на происхождение, например, таблицы могут быть хорошими в течение 10 минут.
Для более крупных семейств, как `~/люди, я, как правило, не нужно несколько удалить использовать-дело, как правило, не возникают естественным образом и так один удалить работает нормально.
В будущем, и из опыта такой работы API-интерфейсов REST и удары одни и те же вопросы и требования, как аудит, я'd быть склонны использовать только GET и POST и конструкции вокруг событий, например изменение адреса, событие, хотя я подозреваю, что'Лл приходят со своим набором проблем :)
Я'd также позволит фронтенд-разработчиков для создания собственных API, которые потребляют более строгие серверным API-интерфейсы, так как там'ы часто практических, действует на стороне клиента, причины, по которым они не'т, как строгий "и Филдинг Фанатик" по API-интерфейс REST конструкции, так и по продуктивности и кэш наслоение причин.