suchen
HeimBackend-EntwicklungGolangSchöne API-Schlüssel erstellen

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>

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>

Grundlegende Verwendung:

<code>go get github.com/agentstation/uuidkey</code>

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!

Stellungnahme
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
Verwenden von Init für die Paketinitialisierung in GoVerwenden von Init für die Paketinitialisierung in GoApr 24, 2025 pm 06:25 PM

In Go wird die Init -Funktion für die Paketinitialisierung verwendet. 1) Die Init -Funktion wird automatisch bei der Paketinitialisierung aufgerufen und ist geeignet, um globale Variablen zu initialisieren, Verbindungen zu setzen und Konfigurationsdateien zu laden. 2) Es kann mehrere Init -Funktionen geben, die in Dateireihenfolge ausgeführt werden können. 3) Bei der Verwendung sollten die Ausführungsreihenfolge, die Testschwierigkeit und die Leistungsauswirkungen in Betracht gezogen werden. 4) Es wird empfohlen, Nebenwirkungen zu reduzieren, die Abhängigkeitsinjektion zu verwenden und die Initialisierung zu verzögern, um die Verwendung von Init -Funktionen zu optimieren.

GO's Select Anweisung: Multiplexing gleichzeitige OperationenGO's Select Anweisung: Multiplexing gleichzeitige OperationenApr 24, 2025 pm 05:21 PM

GO'SSelectstatementsTreamlinesConcurrentProgrammingByMultiplexingoperationen.1) ITallowswaitingonMultiPhanneloperationen, ExecutingTheFirstreadyone) TheDefaultCasepreventsDeadlocksByAntheProgramtoprosectroseverifnooperation.3) itcanpeusedefoursend

Erweiterte Genauigkeitstechniken in Go: Kontext und KarteigruppenErweiterte Genauigkeitstechniken in Go: Kontext und KarteigruppenApr 24, 2025 pm 05:09 PM

Contextandwaitgroupsarecrucialingoforminggoroutineseffektiv.1) contextAllowSsignalingCancellationanddeadlinesAcrossapiobears, Sicherstellung von Goroutinescanbesten

Die Vorteile der Verwendung von GO for Microservices ArchitectureDie Vorteile der Verwendung von GO for Microservices ArchitectureApr 24, 2025 pm 04:29 PM

GoisbenficialformicroservicesDuetoitsSimplicity, Effizienz, Androbustconcurcysupport.1) GO'Sdesignemphesimplication und idealFormicroservices.2) seine Konzernmodelusings und ChannelsAllows -Handlings -Handlings -Handlings -Handlings -Handlings -Fassungen

Golang gegen Python: Die Vor- und NachteileGolang gegen Python: Die Vor- und NachteileApr 21, 2025 am 12:17 AM

GolangissidealforbuildingsCalablesSystemduetoitseffizienz und Konsumverkehr, whilepythonexcelsinquickScriptingandDataanalyseduetoitssimplication und VacevastEcosystem.golangsDesineScouragesCouragescournations, tadelcodedeanDitsGoroutaTinoutgoroutaTinoutgoroutaTinoutsGoroutinesGoroutinesGoroutsGoroutins, t

Golang und C: Parallelität gegen RohgeschwindigkeitGolang und C: Parallelität gegen RohgeschwindigkeitApr 21, 2025 am 12:16 AM

Golang ist in Gleichzeitigkeit besser als C, während C bei Rohgeschwindigkeit besser als Golang ist. 1) Golang erreicht durch Goroutine und Kanal eine effiziente Parallelität, die zum Umgang mit einer großen Anzahl von gleichzeitigen Aufgaben geeignet ist. 2) C über Compiler -Optimierung und Standardbibliothek bietet es eine hohe Leistung in der Nähe der Hardware, die für Anwendungen geeignet ist, die eine extreme Optimierung erfordern.

Warum Golang verwenden? Vorteile und Vorteile erläutertWarum Golang verwenden? Vorteile und Vorteile erläutertApr 21, 2025 am 12:15 AM

Gründe für die Auswahl von Golang umfassen: 1) Leistung mit hoher Genauigkeit, 2) statisches System, 3) Mechanismusmechanismus, 4) Reiche Standardbibliotheken und Ökosysteme, die es zu einer idealen Wahl für die Entwicklung einer effizienten und zuverlässigen Software machen.

Golang gegen C: Leistung und GeschwindigkeitsvergleichGolang gegen C: Leistung und GeschwindigkeitsvergleichApr 21, 2025 am 12:13 AM

Golang ist für schnelle Entwicklung und gleichzeitige Szenarien geeignet, und C ist für Szenarien geeignet, in denen extreme Leistung und Kontrolle auf niedriger Ebene erforderlich sind. 1) Golang verbessert die Leistung durch Müllsammlung und Parallelitätsmechanismen und eignet sich für die Entwicklung von Webdiensten mit hoher Konsequenz. 2) C erreicht die endgültige Leistung durch das manuelle Speicherverwaltung und die Compiler -Optimierung und eignet sich für eingebettete Systementwicklung.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion