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.
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.
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!
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.
Das hat bei mir funktioniert.
/users?ids[]=id1&ids[]=id2
/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.