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?
SomeApiVersion1
undSomeApiVersion2
... 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.