Mehrere APIs oder eine API mit einem "Auswahl" -Parameter?

8

Angenommen, Sie haben einen Webdienst, der Geschäftslogik über eine Datenquelle hinzufügt. So sieht jede API dieses Dienstes aus: Geben Sie mir bei einer Reihe von Einschränkungen die Elemente aus der Datenquelle, die diese Einschränkungen erfüllen. Sie können sagen, dass Sie von der API eine "Ansicht" der Datenquelle zurückerhalten.

Mit der Zeit werden Sie nun aufgefordert, verschiedene Arten von Ansichten über die Datenquelle zurückzugeben. Sie haben die Möglichkeit, entweder neue APIs für jede "ausreichend unterschiedliche" Ansicht hinzuzufügen oder den Gang zu wechseln und eine getFooDataView () - API bereitzustellen, die einen Parameter verwendet, der angibt, welche Art von Ansicht Sie möchten. Sie haben mehrere konkurrierende Belastungen bei der Entscheidung, welchen Weg Sie einschlagen möchten:

  • Der vorhandene große Client Ihres Dienstes würde es vorziehen, faul zu sein und nicht auf neue APIs zu codieren, wenn neue Ansichten über die Daten benötigt werden.
  • Einige Ihrer Anforderungsparameter (Einschränkungen) sind jedoch nur für einige Ansichten und nicht für andere sinnvoll. Sie müssen Ihren API-Vertrag lockern, indem Sie sagen: "Wenn Sie eine XYZ-Ansicht wünschen, müssen Sie den Parameter" foo "festlegen no effect ", mit dem unglücklichen Nebeneffekt, dass Sie" foo "nicht zu einem erforderlichen Parameter machen können, selbst wenn dies für einige Ansichten der Fall ist.
  • Es wird immer häufiger, dass neue Kunden Ihren Service nutzen möchten. Sie können sich nicht entscheiden, was für sie verwirrender wäre - Sie müssen zwischen verschiedenen, aber enger definierten APIs und einer API wählen, bei der sie wissen müssen, welche Kombination von Parametern ihnen wirklich das gibt, was sie wollen.

Wann ziehen Sie die Grenze, dass etwas eine eigene API sein sollte, im Gegensatz zu einer Variation einer vorhandenen API? Unterschiedliche Personen, mit denen Sie zusammenarbeiten müssen, haben unterschiedliche Ansichten darüber, was zwei Kundenanforderungen semantisch voneinander unterscheidet. Daher kann es schwierig sein, einen Konsens über diese Angelegenheit zu erzielen. Sie möchten auch sicherstellen, dass Ihr Service für zukünftige Kunden nicht unerschwinglich schwer zu nutzen ist. Welche Best Practices treffen Sie, um diese Wahl zu treffen?

RuslanD
quelle

Antworten:

4

Persönlich würde ich mich zu kleineren, engeren APIs neigen. Ich denke nicht, dass sich daraus ergibt, dass eine einheitliche API die Verwendung vereinfacht - vielleicht sogar umgekehrt, da Sie die richtige Kombination von lose typisiertem "ju-ju" herausfinden müssen, um sie zu erhalten Was Sie wollen, während eine engere API selbsterklärender gemacht werden kann. Sie verstecken nur die Komplexität, anstatt sie explizit zu machen.

Es ist auch wahrscheinlich, dass Ihre eine API immer komplexer wird, da sie immer mehr Funktionen umfasst, während die engeren APIs fokussiert und schlank bleiben.

Dies riecht in größerem Maßstab nach dem Prinzip der Schnittstellentrennung .

Es gibt immer andere Möglichkeiten (z. B. eine gute Anleitung), um Kunden bei der Auswahl des richtigen Ansatzes zu unterstützen.

James World
quelle
Ich stimme im Prinzip zu, aber wie versionieren Sie Ihre API? Auf Ihre Weise müssen Sie entweder neue Schnittstellen erstellen, wenn Funktionen hinzugefügt werden, oder Adapter. Auf die Weise des OP können Sie einfach einen weiteren "Befehl" hinzufügen (ungeachtet der magischen Fäden). Es ist die API des OP, die enger, schlanker und fokussierter ist, nicht Ihre.
Robert Harvey
1
Ich folge Ihrer Argumentation für den letzten Satz aus den von mir angegebenen Gründen nicht. Für die Versionierung SomeApiVersion1und SomeApiVersion2... usw. wirken Wunder. Auf diese Weise haben Sie die vollständige Kontrolle über Migration und Verfall. Mehrere Versionen über dieselbe Benutzeroberfläche sehen an Tag 1 gut aus, aber Sie zahlen den Preis für eine lange, lange Zeit.
James World
Das ist sicherlich ein vernünftiger Ansatz, aber es gibt keine Möglichkeit, ihn als eng, schlank oder konzentriert zu bezeichnen. Sie werden mit einer Vielzahl von Schnittstellen und Adaptern konfrontiert.
Robert Harvey
2
Ich nenne jede API eng, schlank und fokussiert, nicht das Ganze. Ich sage, dass die Komplexität des Ganzen konstant ist, unabhängig davon, ob Sie eine geteilte API haben oder nicht, und dass jeder Client nur die Komplexität übernehmen muss, die er mit einem geteilten Ansatz benötigt.
James World
2
Ich glaube, das ist eine Täuschung (Entschuldigung für die starke Sprache). Die Komplexität ist immer noch da, aber Sie haben sie gerade versteckt. Ich habe das immer wieder in steigenden Wartungskosten gesehen. Es ist ein sicherer Feuerweg zu einem großen Ball aus Schlammarchitektur.
James World