2016-03-21 7 views
2

Ist es:Was ist der richtige Weg, um einen Get für mehrere Ressourcen (Batch Get) mit REST zu machen?

GET api/stuff?ids[]=123&ids[]=456&ids[]=789&ids[]=101112&etc... 

ist es:

POST api/stuff/batch 
    body: ids: [123, 456, 789, 101112, etc] 

?

Die erste scheint semantisch korrekt zu sein, aber abgesehen von einer unglaublich groben URL gibt es Quellen, die sagen, dass es potenziell eine Grenze für die Länge eines Get gibt, also was ist, wenn ich ein paar Milliarden Ids habe?

Die zweite scheint besser, weil es keine grobe url ist, aber mein Verständnis mit Ruhe ist, dass ein POST soll eine Änderung zu machen, nicht idempotent werden ..

Das ist also ein rein semantische Frage und es gibt keine wahre "richtige" Art und Weise?

Antwort

0

würde ich POST verwenden, weil dieser:

POST requests are never cached (by browser) 
POST requests have no restrictions on data length 

mehr lesen: HTTP Methods: GET vs. POST

auch POST, bevor REST definiert wurden GET. Es ist also keine Schande, (manchmal!) POST für einige schreibgeschützte Anfragen zu verwenden.

1

Es gibt keinen "richtigen" Weg, es hängt wirklich von den besonderen Anforderungen des REST-Servers ab. Doch im Falle eines GET mit einer Abfragezeichenfolge, könnte es wahrscheinlich eher wie diese statt:

GET api/stuff?ids=123+456+789+101112+... 

Oder wie folgt aus:

GET api/stuff?ids=123,456,789,101112,... 

Oder diese:

GET api/stuff?ids=123|456|789|101112|... 

Welches Trennzeichen auch immer der Server verwenden möchte.

1

Wie bei vielen Dingen in REST, ist es nicht immer möglich, puristisch zu sein.

Eine Lösung besteht darin, die Definition dessen zu definieren, was eine Ressource ist. Dann ist das Erhalten mehrerer Ressourcen selbst eine Ressource.

POST kann idempotent sein, wenn dies für Ihre APIs am besten ist. Es ist nur so, dass PUT immer idempotent sein sollte, während POST es sich leisten kann, nicht zu sein. Dokumentieren Sie den Endpunkt einfach richtig.

Sie können zulassen, die IDs von GET und POST zu akzeptieren. Abhängig davon, wie viele IDs gesendet werden, kann der Client beides auswählen. Dokumentiere es einfach richtig.

Das Leitprinzip ist, wie einfach und konsistent Ihre APIs sind. Verstehen Sie, dass die Erstellung von APIs ein UX-Problem ist.