Http GET и DELETE несколько запросов сущностей одновременно (PHP)

Как видно из названия — это действительно?

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

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

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

позволить серверу вернуть несколько объектов одновременно?

Я не мог видеть никаких примечаний в документах RFC. Кроме того — глядя на коды состояния, чтобы вернуться — кажется, не строить таким образом.

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

РЕДАКТИРОВАТЬ: язык, кстати, PHP

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

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

0

Решение

Вы можете делать правильные HTTP-запросы, но идти против конструкции HTTP. В своем ответе я остановлюсь на правильном дизайне HTTP.

Во-первых, когда вы делаете запросы GET, вы всегда получаете представление ресурса. Даже если URL представляет собой что-то вроде «коллекции ресурсов», в HTTP нет строгого определения этого. Этот список ресурсов может по-прежнему представлять несколько «сущностей», приходящих из вашей модели данных.

Так что призыв к /users может вернуть несколько пользовательских объектов.

Точно так же, DELETE для пользователей может означать, что вы удаляете весь /users Коллекция и все в этом.

Одна проблема, на которую я смотрю, и на которую у меня нет хорошего ответа, заключается в том, что вы используете строку запроса для удаления нескольких ресурсов. Я думаю, что это хорошо для GET / HEAD, но я спрашиваю, правильно ли это для DELETE также. Это определенно кажется мне немного странным, потому что я чувствую, что DELETE на /users?foo=bar следует удалить /users и обычно это происходит из-за того, как работает большинство фреймворков. Должно ли это? Я на самом деле не уверен. REST не является строго стандартом, поэтому мы не можем найти там ответы, и все, что я получил, это то, что он «чувствует себя неправильно». Я понимаю, что вы не строго запрашиваете REST, поэтому со строгой точки зрения HTTP это определенно нормально.

Однако вы можете структурировать свои URL так, чтобы они не выглядели так:

/users?id[]=12&id[]=4&id[]=65

но вместо этого как то так:

/users/12,4,65

Я видел, как другие делают это, и мне это кажется немного менее неправильным. Но это в основном гипотеза.

Независимо от того, если вы делаете DELETE на нескольких подобных объектах запрос должен либо успешно выполняться, либо вообще ничего не делать. Частичный успех не принимается, поэтому вы можете просто использовать обычные коды ответов 200/204 для указания успешного удаления.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]