2016-07-28 25 views
0

Wie der Titel sagt - ist es gültig?Http GET und DELETE mehrere Entity Anfragen auf einmal (PHP)

Was meine ich

Wenn ich mit einem Endpunkt nenne GET ist es dann gültig

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

zu tun, um die Server Rückkehr mehr Entitäten auf einmal zu lassen?

Ich konnte keine Notiz in den RFC-Dokumenten sehen. Auch - mit Blick auf die Statuscodes zurückzukehren - es scheint nicht so zu bauen.

Also ich denke, eine GET oder DELETE oder HEAD Anfrage ist nur für eine Einheit?

EDIT: Sprache ist PHP btw

EDIT2: Das ist, was ich vermeiden wollen: https://stackoverflow.com/a/18141127/3411766

Ich möchte nicht den Körper verwenden.

+0

Wie würde Ihre Anfrage wissen, welche Art von Antwort zurückgegeben werden soll, und warum möchten Sie dies tun? –

+0

Nun, natürlich mehrere Entitäten mit einem einzigen Anruf zurück zu bekommen. – cottton

Antwort

1

Sie können gültige HTTP-Anfragen stellen, aber gegen das Design von HTTP gehen. Ich konzentriere mich in meiner Antwort auf das korrekte HTTP-Design.

Erstens, wenn Sie eine GET-Anforderungen ausführen, erhalten Sie immer eine Darstellung einer Ressource. Auch wenn eine URL so etwas wie eine "Sammlung von Ressourcen" darstellt, gibt es keine strikte Definition in HTTP. Diese Liste von Ressourcen kann immer noch mehrere Entitäten darstellen, die aus Ihrem Datenmodell stammen.

So ein Anruf an /users kann mehrere Benutzer-Entitäten zurückgeben.

Ebenso kann ein DELETE an Benutzer bedeuten, dass Sie die gesamte /users Sammlung und alles darin löschen.

Ein Problem, das ich sehe, und keine gute Antwort auf haben ist, dass Sie die Abfragezeichenfolge verwenden, um mehrere Ressourcen zu löschen. Ich denke, das ist in Ordnung für GET/HEAD, aber ich Frage, ob es auch für DELETE korrekt ist. Es fühlt sich definitiv ein bisschen "komisch" an, weil ich glaube, dass ein DELETE auf /users?foo=bar/users löschen sollte und es wird normalerweise aufgrund der meisten Frameworks funktionieren. Sollte es? Ich bin mir eigentlich nicht sicher. REST ist nicht unbedingt ein Standard, also können wir dort keine Antworten finden. Alles was ich habe, ist, dass es sich falsch anfühlt. Mir ist klar, dass du nicht streng nach REST fragst, also aus einer strengen HTTP-Perspektive ist es definitiv in Ordnung.

Allerdings könnten Sie Ihre Urls Struktur nicht aussehen:

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

, sondern so etwas wie dieses:

/users/12,4,65 

Ich habe andere gesehen tun dies, und es fühlt sich ein bisschen weniger falsch zu mir. Aber das ist meistens Vermutung.

Unabhängig davon, ob Sie eine DELETE für mehrere Entitäten wie diese ausführen, sollte die Anforderung entweder erfolgreich sein oder gar nichts tun. Ein Teilerfolg wird nicht akzeptiert, daher können Sie einfach die üblichen 200/204 Antwortcodes verwenden, um auf ein erfolgreiches Löschen hinzuweisen.