2016-07-28 2 views
0

Как говорится в названии - действительно ли это?Http GET и DELETE несколько запросов объектов сразу (PHP)

Что я имею в виду

Если я называю конечной точкой с GET он действителен сделать

http://some.thing/more?id[]=12&id[]=4&id[]=65

, чтобы возвращаемые сервером несколько объектов одновременно?

Я не видел комментариев в документах rfc. Также - просмотр кодов статуса для возврата - похоже, это не так.

Итак, я предполагаю, что запрос GET или DELETE или HEAD предназначен только для одного объекта?

EDIT: язык PHP КСТАТИ

EDIT2: это то, что я хочу, чтобы избежать: https://stackoverflow.com/a/18141127/3411766

Я не хочу, чтобы использовать тело.

+0

Как бы ваш запрос знал, какой тип ответа будет возвращен, и почему вы хотите это сделать? –

+0

Ну, очевидно, чтобы вернуть несколько объектов с помощью одного вызова. – cottton

ответ

1

Вы можете сделать действительные 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 для указания успешного удаления.

Смежные вопросы