Вы можете сделать действительные HTTP-запросы, но идти против дизайна HTTP. Я сосредоточен в своем ответе на правильный HTTP-дизайн.
Во-первых, когда вы выполняете запросы GET, вы всегда получаете представление о ресурсе. Даже если URL-адрес представляет собой нечто вроде «коллекции ресурсов», в HTTP нет строгого определения. Этот список ресурсов по-прежнему может представлять собой несколько «сущностей», исходящих из вашей модели данных.
Таким образом, вызов /users
может возвращать несколько пользовательских объектов.
Аналогичным образом, DELETE
пользователям может означать, что вы удаляете всю коллекцию /users
и все в ней.
Одна из проблем, которые я вижу, и на них нет большого ответа, заключается в том, что вы используете строку запроса для удаления нескольких ресурсов. Я думаю, что это нормально для GET
/HEAD
, но я сомневаюсь, что это правильно для DELETE
. Он определенно чувствует себя немного «странным» для меня, потому что я чувствую, что DELETE
на /users?foo=bar
должен удалить /users
, и обычно это будет связано с тем, как работает большинство фреймворков. Должно ли это? На самом деле я не уверен. REST не является строго стандартом, поэтому мы не можем идти и находить ответы там, поэтому все, что у меня есть, это то, что он «чувствует себя не так». Я понимаю, что вы не строго запрашиваете REST, поэтому со строгой точки зрения HTTP это определенно нормально.
Однако, вы можете структурировать URLs, чтобы не выглядеть так:
/users?id[]=12&id[]=4&id[]=65
но вместо этого что-то вроде этого:
/users/12,4,65
Я видел это делают другие, и он чувствует себя немного меньше неправильно для меня. Но это в основном гипотеза.
Независимо, если вы делаете DELETE
на нескольких объектах, подобных этому, запрос должен либо преуспеть, либо вообще ничего не делать. Частичный успех не принимается, поэтому вы можете просто использовать обычные коды ответов 200/204 для указания успешного удаления.
Как бы ваш запрос знал, какой тип ответа будет возвращен, и почему вы хотите это сделать? –
Ну, очевидно, чтобы вернуть несколько объектов с помощью одного вызова. – cottton