Ich bin relativ neu in GraphQL, und ich habe festgestellt, dass Sie verwandte Felder auf eine von zwei verschiedenen Arten auswählen können. Nehmen wir an, wir haben eine droids
Tabelle und eine humans
Tabelle, und droids
haben eine owner
, die ein Datensatz in der humans
Tabelle ist. Es gibt (mindestens) zwei Möglichkeiten, können Sie dies auszudrücken:GraphQL: Sind beide Muster besser/schlechter?
query DroidsQuery {
id
name
owner {
id
}
}
oder:
query DroidsQuery {
id
name
ownerId # this resolves to owner.id
}
Auf den ersten Blick die frühere mehr idiomatische scheint, und natürlich, wenn Sie mehrere Felder sind die Auswahl hat Vorteile (owner { id name }
vs eine neue ownerName
machen müssen, damit Sie ownerId ownerName
tun können). Allerdings gibt es eine gewisse Offenheit für den Stil ownerId
, wie Sie ausdrücken "hier ist das Ding, das ich speziell erwartet habe, dass Sie auswählen".
Auch von einer Implementierung Standpunkt scheint es, wie owner { id }
würde selbst macht eine unnötiges JOIN
zu dem Resolver verleihen, wie es owner { id }
als id
Spalte der Tabelle humans
(gegenüber einem ownerId
Feld übersetzen würde, die mit ihrem eigenen Resolver, weiß, dass es kein JOIN benötigt, um die owner_id
Spalte der droids
Tabelle zu erhalten).
Wie ich schon sagte, ich bin neu in GraphQL, also bin ich sicher, dass es viele Nuancen zu dieser Frage gibt, die ich schätzen würde, wenn ich sie länger benutzt hätte. Daher habe ich auf Erkenntnisse von jemandem gehofft, der GraphQL in die Vor- und Nachteile beider Ansätze eingesetzt hat. Und um klar zu sein (und um zu vermeiden, dass diese Antwort geschlossen wird), suche ich explizit "hier ist was objektiv schlecht/gut über einen Ansatz gegenüber dem anderen", nicht subjektiv "Ich bevorzuge einen Ansatz" Antworten.
Vielen Dank für diese detaillierte Antwort, aber ich fühle mich wie Sie sagen, "Sie können es so oder so tun".Die Sache ist, ich weiß bereits, dass ich es auf jede Weise tun kann; Was ich wirklich zu verstehen versuche, sind die Vorteile/Nachteile (dh die Kompromisse), dies auf die eine oder andere Weise zu tun. – machineghost