2017-06-02 1 views
1

Sagen wir, ich habe zwei Objekte, Benutzer und Termine, wo Benutzer einen oder mehrere Termine haben können.Was ist die beste Vorgehensweise für Routing-Beziehungen in einer REST-API?

Ich bin neugierig, wenn ich den Konsumenten der API erlauben sollte, von den Benutzern aus dem Appointments Controller zu "filtern". Hier sind die Rufe ich im Sinn für die GET-Operationen haben:

Users Controller 
GET 
api/Users 
api/Users/{userId} 
api/Users/{userId}/Appointments 
api/Users/{userId}/Appointments/{appointmentId} 

Appointments Controller 
GET 
api/Appointments/ 
api/Appointments/{appointmentId} 

Ich bin gespannt, ob es eine gute Idee (Good Practice) ist Filter für die Benutzer in den Ernennungen Controller zu implementieren ... So werden die Anrufe über werden würde:

Appointments Controller 
GET 
api/Appointments/{userId:int?} 
api/Appointments/{appointmentId} 

In den obigen Anrufe habe ich einen optionalen Abfragezeichenfolgeflag Parameter für die Benutzer-ID hinzugefügt, die auf null wird standardmäßig. Dies würde es einem Aufrufer ermöglichen, entweder alle Termine abzurufen oder Termine nach userId abzurufen.

Ich glaube, ich bin mir nicht wirklich sicher, was als Best Practice für Objekte mit Beziehungen gilt.

Antwort

0

Wenn Sie Einfachheit wünschen würde ich

Benutzer vorschlagen GET

api/users 
api/user/{id} 
api/user/{id}/appointments 

Termine

api/appointments 
api/appointment/{id} 

Und von den Blicken von ihm GET api/Appointments/{userId:int?} liest nicht gut, da ein Benutzer hat Termine und ein Termin hat nur einen einzigen Benutzer. Im Fall des Endpunktes api/Appointments/{appointmentId} bin ich nicht sicher, was AppointmentId ist, aber wenn es ein int ist, müssen Sie einige funky Sachen tun, um einen Termin oder einen Benutzer basierend auf einem Int nachzuschlagen, in welchem ​​Fall der IDs könnten gleich sein.

Zu weit in die Tiefe eines Objektbaums zu gelangen kann bis zur URL-Struktur verwirrend werden.

Verwandte Themen