ホームページ バックエンド開発 Golang 美しい API キーの作成

美しい API キーの作成

Jan 11, 2025 am 08:52 AM

Making Beautiful API Keys

概要: 開発者のエクスペリエンスを向上させるために、AgentStation は、UUID を美しく読みやすい API キーにエンコードするための uuidkey パッケージを作成しました。このパッケージは UUIDv7 をサポートしており、データベースの並べ替えとインデックス作成のためのキーをデコードできます。

質問:

API キーは、ユーザーが AgentStation 製品と最初にやり取りする際の重要な部分です。キーは美しく、使いやすいものであることが望まれますが、業界には標準が不足しているようです。開発者中心のスタートアップとして、私たちは理想的なソリューションを見つけるために時間と労力を投資しています。

ほとんどの API キーは最悪です:

API キーには次の要件があります:

  • 安全性
  • 世界的にユニーク
  • 並べ替え可能
  • Postgres での優れたパフォーマンス
  • 美しい外観

しかし、ほとんどの API キーは美観に欠けており、一貫性のないランダムな文字であることが多く、読み取り、並べ替え、識別が困難です。 私たちは、API キーが、人生の良いもののように、見た目が美しく、対称的であることを望んでいます。

拒否された ID:

ランダムすぎる、推測しやすい、見た目が醜い...すべてが満足できません。

  • 整数と BigInt: 読みやすく、並べ替えも簡単です。しかし、キーの数が公開され、推測が容易で、セキュリティが不十分です。
  • NanoID: 完全にランダムなカスタマイズ可能な ID を提供し、公開識別子に最適です。ただし、並べ替えやデバッグのためのタイムスタンプ情報が不足しています。
  • UUID: 業界標準。検討に値する 2 つのバージョンがあります:
    • UUIDv4: 純粋にランダムな文字、シンプルかつ効果的。
    • UUIDv7: デバッグとデータベース クエリの並べ替えを容易にするタイムスタンプが含まれています。
  • ULID: にはタイムスタンプが含まれており、可読性を高めるために Base32 を使用してエンコードされます。しかし、私たちは UUID ネイティブ Postgres サポートを好みますが、その美しさはまだ不十分です。

私たちのソリューション:

既存のソリューションには美学 (対称性) が欠けているため、独自のアプローチを作成しました。

  1. ベース ID として UUIDv7 を使用し、タイムスタンプ情報を利用します。
  2. Crockford Base32 エンコードを使用して可読性を向上させます。
  3. 美しいダッシュを追加して視覚効果を高めます。

結果:

<code>key, _ := uuidkey.Encode("d1756360-5da0-40df-9926-a76abff5601d")
fmt.Println(key) // Output: 38QARV0-1ET0G6Z-2CJD9VA-2ZZAR0X</code>
ログイン後にコピー
ログイン後にコピー

私たちのキー:

  • 31 文字 (ダッシュなしで 28 文字)、UUID の 36 文字より短い。
  • 7 つの大文字と数字の 4 セットを含む可読性の高い段落。「ブロック状」の美しさと可読性を備えています。
  • デコードされた UUID として保存すると、時系列に並べ替えることができます。
  • ユーザーに表示されるキーのタイムスタンプは難読化されています (ただし、技術に精通したユーザーはデコードできます)。キー内のタイムスタンプ メタデータは追加のボーナスであると考えており、UUIDv4 の使用を選択することもできます。

UUIDv7 を選択する理由?

タイムスタンプの利点に加えて、UUIDv7 は Postgres v18 でネイティブ サポートを受ける予定です。現在、拡張機能を使用してサーバー側で UUIDv7 を生成することは可能ですが、ネイティブの Postgres サポートは間違いなくパフォーマンスが向上し、uuidkey.Encode() とうまく連携するでしょう。

私たちの実装では現在、アプリケーション層でキーを生成し、並べ替えとインデックス付けのためにそれらを UUID として保存しています。 Postgres v18 がリリースされたら、アプリケーション層の負荷を軽減し、より良いパフォーマンスを達成するために Postgres ビルドに切り替える予定です。

Crockford Base32 を選ぶ理由?

Crockford Base32 エンコードを選択した理由は次のとおりです。

  • 読みやすくするために、大文字と数字のみを使用してください。
  • キーの長さを約 1/5 に短縮します。
  • マッピングは効率的で予測可能です。

ダッシュを使用する理由

ダッシュ キーは「ブロック状」で対称的です。個々の文字をグレーアウトすると、まるでバーコードのように見えます。これにより、キーの一部をすばやく読み取って識別することが容易になると考えられます。

ダッシュにより、便利なダブルクリックのコピー機能が削除されますが、これは読みやすさとのトレードオフとして価値があると考えています。私たちは、ユーザーがそれらをどこにでもコピーして貼り付けることを望んでいません。実際、私たちはそれらを慎重に扱ってほしいと考えています。理想的には、ユーザーはダッシュボードでキーを生成するときにキーを 1 回だけコピーする必要があるため、この問題を解決するために UI にコピー ボタンを追加しました。

uuidkey パッケージ:

これらの設計の選択肢は、github.com/agentstation/uuidkey でオープンソース化されています。私たちの美学、推論、対称性に同意し、独自の美しい API キーを取得したい場合は、遠慮なく私たちのオープンソース プロジェクトを試してみてください。

uuidkey パッケージの中核は、Base32-Crockford コーデックを介して UUID を読み取り可能なキー形式にエンコードし、それをデコードして UUID に戻すことです。

エンコーディング:

コード スニペットは原文に記載されているため、ここでは繰り返しません。

デコード:

コード スニペットは原文に記載されているため、ここでは繰り返しません。

このパッケージは、公式 UUID 仕様 (RFC 4122) に従う任意の UUID で動作するように設計されていますが、特に最も人気のある 2 つの UUID Go ジェネレーターとの互換性をテストし、維持しています。

  • ゴファー
  • Google

インストールは簡単です:

<code>key, _ := uuidkey.Encode("d1756360-5da0-40df-9926-a76abff5601d")
fmt.Println(key) // Output: 38QARV0-1ET0G6Z-2CJD9VA-2ZZAR0X</code>
ログイン後にコピー
ログイン後にコピー

基本的な使用法:

<code>go get github.com/agentstation/uuidkey</code>
ログイン後にコピー

私たちはオーバーヘッドを最小限に抑えるよう努めています:

パフォーマンス ベンチマーク テストのデータは原文に記載されているため、ここでは繰り返しません。

uuidkey に貢献します:

私たちは uuidkey を実稼働環境で使用しているため、信頼できるオープンソース ツールとして維持することに尽力しています - 貢献は歓迎です!

これが役立つと思われる場合、または改善のための提案がある場合は、GitHub の問題または Discord コミュニティでご意見をお待ちしています。

先行技術と巨人の肩:

プロジェクトをリリースした後、同様の実装を持つプロジェクトがいくつか見つかりましたが、それでも Go を使用した UUID のエンコードとデコードの基準を満たしていませんでした。

  • uuidapikey - Go ですが、UUID 入力のエンコードまたはデコードはサポートしていません。
  • based_uuid - Ruby、ただしパブリック ID 用。

概要:

AgentStation では、AI エージェントが独自の仮想ワークステーションを使用してブラウザを実行し、会議に出席し、コードを実行できるようにするプラットフォームを構築しています。数千のワークステーションに拡張する場合、ソート可能で高性能なキーを持つことが実用的なインフラストラクチャとなります。

しかし、開発者も私たちと同じように、API キーであっても対称性の美しさを高く評価していると私たちは信じています。

実用的かつ美しい uuidkey を見つけていただければ幸いです。

脚注は原文に記載されているため、ここでは繰り返しません。

以上が美しい API キーの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

See all articles