"Öffentliche APIs sind für immer: Nur eine Chance, es richtig zu machen"?

20

In einem OS-Buch habe ich gerade gelesen, dass "Öffentliche APIs für immer sind: Nur eine Chance, es richtig zu machen". Ist es wahr? Gilt es nur für APIs von Betriebssystemen oder auch für andere APIs? Trifft dies beispielsweise für die APIs von Android-Anwendungen wie Tasker, Locale und Pushover zu?

Md Mahbubur Rahman
quelle
2
Ich würde das Prinzip auf allen Code ausdehnen. Es ist einfach nicht genug Zeit, um dasselbe mehrmals zu schreiben. Das Schreiben von perfektem Code ist eine Fähigkeit, die man lernen kann.
tp1
22
@ tp1: Das Schreiben von perfektem Code ist eine Fähigkeit, die es in der realen Welt nicht gibt.
Michael Borgwardt
4
@michael borgwardt: Muss nur auswählen, welche Version von perfect verwendet werden soll.
tp1
1
Ich habe dies in der realen Welt gesehen und es hängt davon ab, welche Art von API. Gelernte Lektion: Die erste Voraussetzung für eine öffentlich zugängliche Web-API ist, dass der API-Benutzer auswählen kann, welche Version der API verwendet werden soll.
Josh Petitt

Antworten:

32

Dies gilt im Allgemeinen für alle öffentlichen APIs, ja. Sobald Sie eine API der Öffentlichkeit zugänglich machen und Benutzer damit beginnen, Anwendungen zu erstellen, die von dieser API abhängen, wird es äußerst schwierig, die API zu ändern, da dies alle diese Anwendungen zum Erliegen bringt. Das ist in der Regel sowohl ein schwieriges technisches als auch ein schwieriges politisches Problem.

Natürlich ist es möglich, eine öffentliche API zu ändern. Es kommt beispielsweise vor, dass Projekte eine API in einer Version deklassieren, eine neue API einführen und dann die alte API in einer zukünftigen Version entfernen. Dies setzt jedoch voraus, dass jede (wichtige) Anwendung, die die alte API verwendet, neu geschrieben wird, um die neue API zu verwenden, bevor die alte API entfernt wird. Das dauert oft mehrere Jahre. Dies bedeutet, dass der Eigentümer der öffentlichen API jedem anderen Projekt, das die API verwendet, Kosten auferlegt. Da es im Allgemeinen weitaus mehr Verbraucher einer API gibt, handelt es sich bei diesen Verbrauchern in der Regel um eine relativ mächtige politische Lobby.

Justin Cave
quelle
2
"sowohl ein schwieriges technisches Problem als auch ein schwieriges technisches Problem" Sie haben zweimal "technisch" wiederholt.
Luiscubal
12
@ Luiscubal: Das liegt daran, dass es in der Tat ein verdammt schwieriges technisches Problem ist.
Michael Borgwardt
3
@ Luiscubal Du meinst einmal. Einmal wiederholt, zweimal gesagt.
Joe Z.
4
"Öffentliche Antworten sind nicht für immer ..."
Chris
3
@ Chris Nicht wirklich. Justins Antwort ist jetzt nicht mehr mit Luiscubals Kommentar vereinbar. :-)
Svick
12

Der Autor des Zitats ist Joshua Bloch. Die Aussage stammt aus seinem Artikel über das API-Design für Autoaufkleber :

Öffentliche APIs sind wie Diamanten für immer. Sie haben eine Chance, es richtig zu machen, also geben Sie Ihr Bestes.

Für weitere Details dazu verweist der Autor die Leser auf seine Konferenzpräsentation "Wie man eine gute API entwirft und warum es wichtig ist" . Folie Warum ist API-Design wichtig für Sie? Es ist ziemlich klar, dass dies für jede Programmieraktivität relevant ist (Betriebssysteme oder nicht, egal für welchen Autor):

  • Wenn Sie programmieren, sind Sie ein API-Designer

    • Guter Code ist modular - jedes Modul hat eine API
  • Nützliche Module werden häufig wiederverwendet

    • Sobald das Modul Benutzer hat, kann die API nicht mehr beliebig geändert werden
    • Gute wiederverwendbare Module sind Unternehmensvermögen
  • Das Denken in APIs verbessert die Codequalität

Slide Fazit unterstreicht dies auch als allgemeinen Ansatz:

  • API-Design ist ein edles und lohnendes Handwerk

    • Verbessert die Menge der Programmierer, Endbenutzer, Unternehmen ...
Mücke
quelle
2
Technisch gesehen ist Diamant metastabil. Thermodynamisch gesehen ist Graphit eine stabilere Form von Kohlenstoff.
Detly
3

APIs ändern sich immer, sonst was wäre der Sinn eines System-Upgrades? Nur Interna wechseln?

Jede Version des Systems bringt neue APIs, alte APIs werden veraltet und veraltete APIs verschwinden.

API-Änderungen müssen nur technisch und in Bezug auf die Kommunikation sehr vorsichtig sein.

mouviciel
quelle
Solange können Sie gut mit allen Ihren Kunden commuincate und sie können t ihre Nutzer sprechen - Blick auf Windows: Windows hat Tonnen von alten, veraltet, schlecht APIs als Endanwender wie laufen extrem alten Anwendungen auch auf modernen Systemen
johannes
2

Meiner Meinung nach ist diese 'Version' der API nach ihrer Veröffentlichung für immer, aber Sie können sie durch die Veröffentlichung einer '2.0'-API ablehnen (es gibt mehrere Beispiele, in denen dies geschieht - derzeit kann ich an Strava denken, der sie veröffentlicht hat eine 2.0-Version einer API für die Entwicklung, um deren Dienste zu nutzen).

Das Problem besteht darin, dass die ursprüngliche API ins Unendliche geht ... Ich denke, das hängt von der Verwendung der alten API ab und davon, welchen Wert diese API-Konsumenten für Sie haben.

Zurück zu den alten Zeiten von Windows 3.x und 9x usw., nach der Veröffentlichung wurden diese Betriebssystem-APIs erstellt und eingerichtet. Jetzt werden die Betriebssystemupdates ständig gepusht, sodass neue APIs veröffentlicht werden können. Solange Sie jedoch eine bestimmte Betriebssystemversion (Hauptversion) ausführen, werden diese APIs möglicherweise nur hinzugefügt, niemals entfernt sei der Fall für die 'nächste' Hauptversion.

Hmm, vielleicht bin ich von der ursprünglichen Frageabsicht abgewichen.

Maich
quelle
1

Es hängt davon ab, um welche Art von API es sich handelt (und ich gehe davon aus, dass sich die Änderungen ändern, ansonsten ist die Aussage offensichtlich nicht wahr).

Wenn der Aufrufer auswählen kann, welche Version er verwendet (z. B. mit Bibliotheken / Frameworks, die mit der aufrufenden Anwendung gebündelt sind), ist das Ändern der API kein großes Problem - aber immer noch schlecht für den Ruf der Software. Leute möchten nahtlos upgraden.

Wenn andere Benutzer die alte Version der API nicht mehr verwenden können (z. B. bei einem Onlinedienst oder in einem Browser oder Betriebssystem, in dem alte Versionen sehr unerwünscht sind), ist es sehr schlecht, APIs inkompatibel zu ändern in der Tat, da es alle Software, die es verwendet, kaputt macht und auch nicht aktualisiert wird. Dies verursacht den Entwicklern Wartungskosten und sie werden Sie dafür hassen. Und Software, die nicht gewartet wird und nicht funktioniert, wird sich auch auf Sie negativ auswirken.

Auf der spannenden Seite gibt es mindestens einen API-Anbieter, der ständig Änderungen an der API vornimmt und trotzdem lächerlich erfolgreich ist: Facebook. Sie gehen jedoch sehr sorgfältig mit den Änderungen um: Es gibt eine veröffentlichte Richtlinie , aktuelle Änderungen werden mindestens 90 Tage im Voraus angekündigt und erklärt, und Entwickler können sie innerhalb dieses Zeitraums frühzeitig aktivieren.

Michael Borgwardt
quelle
1

Wenn Sie die Voraussicht haben, eine Versionsnummer in die API selbst aufzunehmen. Entweder beim Verbindungs- / Initialisierungsaufruf oder irgendwo am Anfang der Parameterliste bei jedem Aufruf kann sich Ihre API im Laufe der Zeit weiterentwickeln und verändern, ohne vorhandene Clients zu stören.

James Anderson
quelle
0

Obwohl alles, was wir tun, ist, sie auf einmal zum Besten zu machen, aber da die Zeit umschlägt und sich verbessert, müssen wir manchmal die Informationen aktualisieren, wie es viele riesige Anbieter getan haben (wie bei Facebook mehrere Updates, twitter one major) Wenden Sie sich an oAuth und mehrere Hauptfächer, aber alle sind mit Verbesserungen verbunden, sodass keine häufigen Änderungen erforderlich sind. Und ja, bitte hören Sie nicht auf, ältere zu unterstützen. Es tut weh !! :)

rptwsthi
quelle
-1

Jedes Mal, wenn Sie ein Kommunikationsprotokoll freigeben, das offensichtlich eine API enthält, haben Sie eine Chance, dies in dem Sinne zu korrigieren, dass das Protokoll / die Schnittstelle abwärtskompatibel und erweiterbar sein muss.

Auf diese Weise können Sie neue Funktionen hinzufügen und neue Versionen freigeben, ohne sich Gedanken darüber machen zu müssen, ob Benutzer mit älteren Versionen betroffen sind. Niemals in der Welt der Software werden Sie eine Situation haben, in der Sie zu einem bestimmten Zeitpunkt nur eine harte Unterbrechung haben können, und jeder die alte Version fallen lässt und die neue Version verwendet.

Fred Thomsen
quelle