webentwicklung-frage-antwort-db.com.de

Übergabe eines Arrays in GET für einen REST - Aufruf

Ich habe eine URL zum Abrufen von Terminen für einen Benutzer wie folgt:

/user/:userId/appointments

Wie sollte die URL aussehen, wenn ich Termine für mehrere Benutzer erhalten möchte?

sollte es sein:

/appointments?users=1d1,1d2..

Danke, Chris.

46
ChrisOdney

Sammlungen sind eine Ressource. Termine sind also eine gute Ressource.

Sammlungen bieten normalerweise auch Filter über den Querystring an. Dies ist im Wesentlichen das, was users = id1, id2 ... ist.

So,

/appointments?users=id1,id2 

eignet sich gut als gefilterte RESTful-Ressource.

60
bryanmac

Ich denke, es ist eine bessere Methode, Ihre REST Aufrufparameter zu serialisieren, normalerweise durch JSON-Codierung:

/appointments?users=[id1,id2]

oder auch:

/appointments?params={users:[id1,id2]}

Dann entschlüsseln Sie sie auf dem Server. Dies gibt Ihnen auf lange Sicht mehr Flexibilität.

Stellen Sie einfach sicher, dass Sie die Parameter auch URLEncode, bevor Sie sie senden!

8
sgress454

Eine andere Möglichkeit, die je nach Serverarchitektur/Framework Ihrer Wahl sinnvoll sein kann, besteht darin, dasselbe Argument immer wieder zu wiederholen. Etwas wie das:

/appointments?users=id1&users=id2

In diesem Fall empfehle ich die Verwendung des Parameternamens in Singular:

/appointments?user=id1&user=id2

Dies wird nativ von Frameworks wie Jersey (für Java) unterstützt. Schauen Sie sich diese Frage für weitere Details an.

7

Das hat bei mir funktioniert.

/users?ids[]=id1&ids[]=id2
1
Ravi MCA
/appointments?users=1d1,1d2.. 

ist gut. Es ist so ziemlich Ihre einzige vernünftige Option, da Sie mit einem GET nicht in einem Körper übergehen können.

1
Oleksi