昨年初めて TypeID を発表して以来、コミュニティからの大幅な採用と関心が見られ、コミュニティから提供された 23 の異なる言語クライアントと、Typescript 実装の NPM による毎週 90,000 のダウンロードが行われました。 .
先週、私たちは Typescript 実装である TypeID-JS のバージョン 1.0 をリリースしました。このリリースを記念して、TypeID を作成した理由と、それを Jetify でタイプ セーフを確保するためにどのように使用するかについてさらに詳しく共有したいと思いました。
私たちは、チーム全体で Devbox または Docker ベースのプロジェクトを展開および管理するためのソリューションである Jetify Cloud を構築する際に、TypeID のアイデアを開発しました。 Jetify Cloud のアーキテクチャには、組織、ユーザー、デプロイメント、シークレット、プロジェクトなど、管理する必要があるさまざまなエンティティがあり、それらを区別するために一意の識別子が必要です。
当初、私たちはベスト プラクティスに従い、エンティティの各インスタンスに UUID を割り当てることから始めました。それでも、すぐに問題に遭遇しました。UUIDv7 にはタイプ セーフがありません。以下のコードを例として取り上げます:
export const getMember = async ( memberId: UUID, orgId: UUID, ) => { const { member, organization } = await authClient.organizations.members.get({ organization_id: orgId, member_id: memberId, }); return { member, organization }; };
この関数は 2 つの UUID を使用してメンバーと組織を検索します。ただし、この関数は memberID と orgID が正しいエンティティを表すことを保証できません。開発者が orgID を予期していた memberID を誤って使用した場合、問題は実行時にのみ発見されます。
この問題の解決策を探していたところ、プレフィックスを使用して型情報を ID にエンコードする Stripe の Object ID に出会いました。これは素晴らしい解決策のように思えましたが、残念ながら、複数の言語にわたって型付き ID を一貫して実装するための明確に定義された標準が見つかりませんでした。
TypeID は、そのような一貫した標準を作成するための私たちの試みです。 TypeID は、Stripe の接頭辞付き型からインスピレーションを得た、タイプセーフで K ソート可能なグローバルに一意な識別子です。 TypeID は、他の言語がクライアントやライブラリを実装するための一貫した標準も提供します。
TypeID は、一意の識別子を次の 3 つの部分からなる小文字の文字列としてエンコードします。
user_2x4y6z8a0b1c2d3e4f5g6h7j8k └──┘ └────────────────────────┘ type uuid suffix (base32)
この形式を使用すると、TypeID 互換クライアントは型情報を ID にエンコードおよびデコードし、ビルド時またはコンパイル時にチェックを実行して、正しい ID を使用していることを確認できます。たとえば、ユーザー エンティティのランダムな TypeID を作成したい場合は、次のようなことができます:
TypeID を使用すると、関数に型チェックを追加し、実行時にエラーをキャッチすることもできます。上記の例を書き直すと、開発者が適切な場所で適切な ID を使用することが確実になります:
import { TypeID } from 'typeid-js'; export const getMember = async ( memberId: TypeID<'member'>, orgId: TypeID<'org'>, ) => { ... }
この形式には、タイプ セーフに加えて、開発者が使いやすいようにするいくつかのプロパティがあります。
本日、TypeID-JS ライブラリのバージョン 1.0 を発表します。このアップデートでは、使いやすさとタイプの安全性を向上させるために、次のようないくつかの新機能が追加されています。
選択した NodeJS パッケージ マネージャーを使用して、JS プロジェクトに TypeID を追加できます。 JS を使用していないのですか? TypeID には、Go から OCaml、SQL まで、26 の異なる実装があります。 TypeID の独自の実装を記述することに興味がある場合は、正式な仕様を確認してください。
Jetify のチームは強力な開発者ツールを構築しています。 Jetify Cloud でデプロイメントとプロジェクトを簡素化するか、Devbox でオンボーディングと開発環境を自動化します。 Twitter で私たちをフォローしたり、Discord サーバーで開発者とライブでチャットしたりできます。 Github リポジトリでの問題やプル リクエストも歓迎します。
以上がTypeID-JS: Javascript 用のタイプ セーフ、K ソート可能な一意の IDの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。