Heim > Backend-Entwicklung > Golang > Schöne API-Schlüssel erstellen

Schöne API-Schlüssel erstellen

Barbara Streisand
Freigeben: 2025-01-11 08:52:41
Original
404 Leute haben es durchsucht

Making Beautiful API Keys

Zusammenfassung: Um das Entwicklererlebnis zu verbessern, hat AgentStation das uuidkey-Paket erstellt, um UUIDs in schöne und leicht lesbare API-Schlüssel zu kodieren. Dieses Paket unterstützt UUIDv7 und kann Schlüssel für die Datenbanksortierung und -indizierung dekodieren.

Frage:

API-Schlüssel sind ein wichtiger Bestandteil der ersten Interaktion eines Benutzers mit AgentStation-Produkten. Wir möchten, dass die Tasten schön und einfach zu bedienen sind, aber es scheint in der Branche an Standards zu mangeln. Als entwicklerorientiertes Startup investieren wir Zeit und Mühe in die Suche nach der idealen Lösung.

Die meisten API-Schlüssel sind scheiße:

Wir haben die folgenden Anforderungen an API-Schlüssel:

  • Sicherheit
  • Weltweit einzigartig
  • Sortierbar
  • Hervorragende Leistung in Postgres
  • Schönes Aussehen

Allerdings mangelt es den meisten API-Schlüsseln an Ästhetik und sie bestehen oft aus inkonsistent formatierten Zufallszeichen, die schwer zu lesen, zu sortieren und zu identifizieren sind. Wir möchten, dass API-Schlüssel ästhetisch ansprechend und symmetrisch sind, wie die guten Dinge im Leben.

Von uns abgelehnte Ausweise:

Zu zufällig, leicht zu erraten, hässlich im Aussehen ... alles unbefriedigend.

  • Ganzzahlen und BigInt: Einfach zu lesen und leicht zu sortieren. Sie geben aber die Anzahl der Schlüssel preis, sind leicht zu erraten und bieten keine ausreichende Sicherheit.
  • NanoIDs: Bietet völlig zufällige, anpassbare IDs, ideal für öffentlich zugängliche Identifikatoren. Es fehlen jedoch Zeitstempelinformationen zum Sortieren und Debuggen.
  • UUIDs: Industriestandard, mit zwei erwägenswerten Versionen:
    • UUIDv4: Rein zufällige Zeichen, einfach und effektiv.
    • UUIDv7: Enthält einen Zeitstempel für einfaches Debuggen und Sortieren von Datenbankabfragen.
  • ULIDs: enthalten Zeitstempel und werden zur besseren Lesbarkeit mit Base32 codiert. Wir bevorzugen jedoch die native UUID-Unterstützung von Postgres, und die Ästhetik ist immer noch unzureichend.

Unsere Lösung:

Aufgrund der mangelnden Ästhetik (Symmetrie) bestehender Lösungen haben wir unseren eigenen Ansatz entwickelt:

  1. Verwenden Sie UUIDv7 als Basis-ID und nutzen Sie Zeitstempelinformationen.
  2. Verwenden Sie die Crockford Base32-Kodierung, um die Lesbarkeit zu verbessern.
  3. Fügen Sie schöne Striche hinzu, um den visuellen Effekt zu verstärken.

Ergebnis:

<code>key, _ := uuidkey.Encode("d1756360-5da0-40df-9926-a76abff5601d")
fmt.Println(key) // Output: 38QARV0-1ET0G6Z-2CJD9VA-2ZZAR0X</code>
Nach dem Login kopieren
Nach dem Login kopieren

Unser Schlüssel:

  • 31 Zeichen (28 ohne Bindestriche), kürzer als die 36 Zeichen einer UUID.
  • Gut lesbarer Absatz mit 4 Sätzen zu je 7 Großbuchstaben und Zahlen, mit „blockiger“ Ästhetik und Lesbarkeit.
  • Kann chronologisch sortiert werden, wenn es als dekodierte UUID gespeichert wird.
  • Der Zeitstempel im für den Benutzer sichtbaren Schlüssel ist verschleiert (kann aber dennoch von technisch versierten Benutzern entschlüsselt werden). Wir denken, dass die Zeitstempel-Metadaten im Schlüssel einen zusätzlichen Bonus darstellen, und Sie können sich auch für die Verwendung von UUIDv4 entscheiden!

Warum UUIDv7 wählen?

Zusätzlich zu den Vorteilen von Zeitstempeln wird UUIDv7 in Postgres v18 native Unterstützung erhalten. Während es derzeit möglich ist, UUIDv7 mithilfe von Erweiterungen serverseitig zu generieren, würde die native Postgres-Unterstützung definitiv eine bessere Leistung erbringen und gut mit uuidkey.Encode() funktionieren.

In unserer Implementierung generieren wir derzeit Schlüssel auf der Anwendungsebene und speichern sie als UUIDs zum Sortieren und Indizieren. Sobald Postgres v18 veröffentlicht wird, werden wir auf Postgres-Builds umsteigen, um die Belastung der Anwendungsschicht zu reduzieren und eine bessere Leistung zu erzielen.

Warum Crockford Base32 wählen?

Wir haben uns für die Crockford Base32-Kodierung entschieden, weil sie:

  • Verwenden Sie zur besseren Lesbarkeit nur Großbuchstaben und Zahlen.
  • Schlüssellänge um ca. 1/5 reduzieren.
  • Mapping ist effizient und vorhersehbar.

Warum Dash verwenden?

Dash-Tasten sind „blockig“ und symmetrisch. Wenn Sie die einzelnen Zeichen ausgrauen, sehen sie fast wie ein Barcode aus. Wir sind der Meinung, dass dies das schnelle Lesen eines Teils eines Schlüssels erleichtert, um ihn zu identifizieren.

Durch den Bindestrich entfällt zwar die praktische Doppelklick-Kopierfunktion, wir sind jedoch der Meinung, dass dies einen lohnenswerten Kompromiss im Hinblick auf die Lesbarkeit darstellt. Wir möchten nicht, dass Benutzer sie überall kopieren und einfügen, vielmehr möchten wir, dass sie mit Sorgfalt behandelt werden. Im Idealfall würden Benutzer einen Schlüssel nur einmal kopieren, wenn sie ihn in unserem Dashboard generieren. Deshalb haben wir der Benutzeroberfläche eine Schaltfläche zum Kopieren hinzugefügt, um dieses Problem zu lösen.

uuidkey-Paket:

Wir haben diese Designoptionen als Open Source unter github.com/agentstation/uuidkey bereitgestellt. Wenn Sie mit unserer Ästhetik, Argumentation und Symmetrie einverstanden sind und Ihren eigenen schönen API-Schlüssel haben möchten, können Sie gerne unser Open-Source-Projekt ausprobieren.

uuidkey Der Kern des Pakets besteht darin, eine UUID über den Base32-Crockford-Codec in ein lesbares Schlüsselformat zu kodieren und sie wieder in eine UUID zu dekodieren.

Kodierung:

Der Codeausschnitt wurde im Originaltext angegeben und wird hier nicht wiederholt.

Dekodierung:

Der Codeausschnitt wurde im Originaltext angegeben und wird hier nicht wiederholt.

Das Paket ist so konzipiert, dass es mit jeder UUID funktioniert, die der offiziellen UUID-Spezifikation (RFC 4122) entspricht. Wir testen und pflegen jedoch speziell die Kompatibilität mit den beiden beliebtesten UUID-Go-Generatoren:

  • Gofrs
  • Google

Die Installation ist einfach:

<code>key, _ := uuidkey.Encode("d1756360-5da0-40df-9926-a76abff5601d")
fmt.Println(key) // Output: 38QARV0-1ET0G6Z-2CJD9VA-2ZZAR0X</code>
Nach dem Login kopieren
Nach dem Login kopieren

Grundlegende Verwendung:

<code>go get github.com/agentstation/uuidkey</code>
Nach dem Login kopieren

Wir sind bestrebt, den Overhead auf ein Minimum zu beschränken:

Leistungsbenchtest-Testdaten wurden im Originaltext angegeben und werden hier nicht wiederholt.

Zu uuidkey beitragen:

Wir sind bestrebt, uuidkey als zuverlässiges Open-Source-Tool aufrechtzuerhalten, da wir es in der Produktion verwenden – Beiträge willkommen!

Wenn Sie es nützlich finden oder Verbesserungsvorschläge haben, würden wir uns freuen, von Ihnen in unseren GitHub-Problemen oder der Discord-Community zu hören.

Frühere Technologie und die Schultern von Giganten:

Nachdem wir das Projekt veröffentlicht hatten, fanden wir einige Projekte mit ähnlichen Implementierungen, die jedoch immer noch nicht unsere Kriterien für die Kodierung und Dekodierung von UUIDs mit Go erfüllten.

  • uuidapikey – Go, unterstützt jedoch keine Codierung oder Decodierung von UUID-Eingaben.
  • based_uuid – Ruby, aber für öffentliche IDs.

Zusammenfassung:

Bei AgentStation bauen wir eine Plattform auf, die es KI-Agenten ermöglicht, über ihre eigene virtuelle Workstation zu verfügen, um Browser auszuführen, an Besprechungen teilzunehmen und Code auszuführen. Da wir auf Tausende von Workstations skalieren, ist die Verfügbarkeit sortierbarer, leistungsstarker Schlüssel eine praktische Infrastruktur.

Aber wir glauben auch, dass Entwickler die Schönheit der Symmetrie genauso schätzen wie wir, selbst bei API-Schlüsseln.

Wir hoffen, dass Sie uuidkey sowohl praktisch als auch schön finden.

Die Fußnoten stammen aus dem Originaltext und werden hier nicht wiederholt.

Das obige ist der detaillierte Inhalt vonSchöne API-Schlüssel erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage