2017-08-31 1 views
1

Also sagen, ich habe drei Modelle/Tabellen: Hinweis, Versand und Benutzer. Und ich möchte Seiten der Sendungen anfordern, aber ich benötige Informationen aus den zugehörigen Notizen (Text, Bild usw.) eines bestimmten Benutzers.Wie werden zwei Ressourcen behandelt, die normalerweise in REST angefordert werden?

Was ist der beste Weg, damit umzugehen?

Sollte ich eine verschachtelte Ressource wie /api/shipment/note erstellen und Abfrageparameter hinzufügen, um die Benutzer-ID, Seitengröße usw. anzugeben? (Ist Verschachtelung Ressourcen wie /api/shipment/note gültig REST? Ich habe etwas gesehen, wie /api/note/{noteid}/shipment gültig ist, aber was ist die Kooperation get alls)

Oder sollte ich fordern alle Sendungen von /api/shipment (Angabe Benutzer in Abfrageparameter) und fordern Sie die Noteninformationen für jede Lieferung von /api/note/{noteid}?

Oder sollte ich /api/user/{userid}/shipment/note verwenden?

Oder weil ich sehr selten die Lieferressource ohne die Informationen aus der Notiz anfordern werde, sollte ich einfach die Notiz-Info in den /api/shipment Endpunkt hinzufügen?

Antwort

1

Wenn Sie in Ihrem Anwendungsfall sowohl die Sendung als auch die Notiz zusammen abfragen, wäre es effizienter, die Anrufe zu kombinieren. Dies setzt auch voraus, dass beide Datensätze aus demselben Datenspeicher stammen.

Um die Fälle zu behandeln, in denen Sie die Daten note nicht benötigen, können Sie eine Ausführlichkeitsstufe oder einen include Abfragezeichenfolgenparameter angeben, um die zusätzlichen Daten zu identifizieren, die enthalten sein sollten.

api/Versand enthalten = Note |? Foo |? Bar

ODER

api/Versand/{id} include = note

1

Ein paar mehr Möglichkeiten basierend auf Antworten von here.

a) einen benutzerdefinierten Medientyp Mit:

GET /api/shipments HTTP/1.1 
Host: example.com 
Accept: application/vnd.company.full+json 

Kredit: https://stackoverflow.com/a/42147688/8543451

b) neue inhaltsspezifische Endpunkte Mit:

/api/shipments/withNotes 

Kredit: https://stackoverflow.com/a/42146963/8543451

c) Als kombinierte Ressource

Dies ist im Grunde b), aber mit einem Twist:

/api/shipmentsWithNotes 

Dies ist, weil es das verbundene Konzept as a noun verdinglicht.

Verwandte Themen