Erfahren Sie, warum das Hinzufügen zufälliger Felder zu JSON-APIs eine bessere Client-Erweiterbarkeit gewährleistet und festcodierte Implementierungen verhindert. Entdecken Sie Best Practices für ein zukunftssicheres API-Design, inspiriert von Chrome und Let's Encrypt.
Beim Entwerfen von APIs ist eine der größten Herausforderungen für Entwickler sicherzustellen, dass zukünftige Änderungen bestehende Client-Implementierungen nicht beeinträchtigen. Zu oft haben wir gut gemeinte Clients gesehen, die JSON-Antworten auf starre Weise analysieren, Feldpositionen hart kodieren oder Annahmen über die Struktur der Antwort treffen, die später die API-Entwicklung verhindern.
Deshalb haben wir uns entschieden, zufällige Felder zu unseren JSON-API-Antworten hinzuzufügen – ein proaktiver Ansatz, inspiriert von erfolgreichen Implementierungen von Chrome und Let's Encrypt.
JSON-APIs sind darauf ausgelegt, erweiterbar zu sein. Die JSON-Spezifikation unterstützt von Natur aus das Hinzufügen neuer Felder, ohne bestehende Parser zu beeinträchtigen. Die Realität ist jedoch komplexer. Viele Client-Entwickler, sei es aus Zeitmangel, Unerfahrenheit oder Missverständnissen, erstellen Implementierungen, die gegenüber Änderungen intolerant sind.
Häufige problematische Muster umfassen:
Diese Implementierungsentscheidungen schaffen eine erhebliche Belastung für API-Pflegende. Jedes neue Feld oder jede Verbesserung birgt das Potenzial für breaking changes, was Innovation erstickt und die natürliche Entwicklung der API verhindert.
Unser Ansatz wurde inspiriert von zwei bemerkenswerten Beispielen in der Tech-Branche:
Chrome implementierte die Permutation der TLS ClientHello-Erweiterungen, um zu verhindern, dass Server eine bestimmte feste Reihenfolge von Erweiterungen erwarten, die Chrome daran hindern könnte, zukünftige Änderungen an seiner TLS-Implementierung vorzunehmen. Durch die zufällige Reihenfolge der TLS-Erweiterungen stellte Chrome sicher, dass Server-Implementierungen sich nicht auf bestimmte Reihenfolgen verlassen konnten, wodurch das gesamte TLS-Ökosystem robuster gegenüber zukünftigen Änderungen wurde.
Let's Encrypt fügte Schlüssel mit zufällig generierten Namen zu ihrem Verzeichnis-Endpunkt hinzu, um Entwickler davon abzuhalten, Clients so zu schreiben, dass sie das Hinzufügen neuer Schlüssel in Zukunft verhindern. Diese proaktive Maßnahme adressierte die Herausforderung, die sie mit frühen ACME-Clients hatten, die gegenüber neuen Feldern intolerant waren, was es schwierig machte, neue Funktionalitäten einzuführen.
Beide Ansätze teilen eine gemeinsame Philosophie: Variabilität früh einführen, um die Verfestigung des Client-Verhaltens zu verhindern.
Nach diesen Beispielen implementieren wir die Zufallseinfeld-Injektion in unseren JSON-API-Antworten. So funktioniert es:
{ "success": true, "result": { "email": "user@gentlent.com", "i5dgf3": "https://gentl.net/random-api", "id": "1647603024929000000", "profile_img": "https://www.gravatar.com/avatar/4584d61ab0bef9513f93a273ac985488?r=pg&d=identicon&s=128", "reseller_id": "12", "support_plan": "basic", "username": "user" } }
randomField_[5-Zeichen-String]
randomProperty_[5-Zeichen-String]
Dieser Ansatz bietet mehrere wesentliche Vorteile:
Unmittelbares Feedback: Clients, die bei unbekannten Feldern ausfallen, scheitern sofort während der Entwicklung, nicht Monate später, wenn wir neue Funktionen einführen.
Entwicklerbildung: Die Dokumentationslinks in zufälligen Feldwerten helfen, den Entwicklern zu zeigen, wie man JSON korrekt analysiert.
Widerstandsfähigkeit des Ökosystems: Durch die Normalisierung der Präsenz unbekannter Felder schaffen wir ein widerstandsfähigeres Ökosystem, das sich an zukünftige Änderungen anpassen kann.
Reduzierte breaking changes: Künftige API-Verbesserungen werden additiv anstatt zerbrechlich, was die Versionskomplexität reduziert.
Derzeit betrifft diese Randomisierung nur unsere JSON-Objektantworten. Andere API-Formate und -Endpunkte bleiben unverändert, während wir die Effektivität dieses Ansatzes bewerten. Wir überwachen das Feedback der Client-Entwickler und erweitern die Implementierung basierend auf den Ergebnissen.
Wenn Sie Clients entwickeln, die unsere APIs nutzen, sind hier die empfohlenen Ansätze:
✅ Machen Sie:
❌ Nicht machen:
Diese Änderung stellt unser Engagement für den Aufbau von APIs dar, die über die Zeit hinweg sich anpassen können. Durch das kontrollierte Einführen von Variabilität stellen wir sicher, dass zukünftige Verbesserungen keine breaking changes für gut implementierte Clients darstellen.
Die zufälligen Felder dienen als sanfte, aber beständige Erinnerung daran, dass JSON-APIs darauf ausgelegt sind, erweiterbar zu sein. Clients, die diese Felder korrekt behandeln, passen sich nahtlos an zukünftige API-Verbesserungen an, während diejenigen, die dies nicht tun, sofort während der Entwicklung Feedback erhalten.
Wir glauben, dass dieser proaktive Ansatz, inspiriert von erfolgreichen Implementierungen im breiteren Tech-Ökosystem, zu einer robusteren und zukunftssicheren API-Plattform für all unsere Nutzer führen wird.
Tom KleinCEO
Gentlent GmbH
GentlentKundendienstsupport@gentlent.com