コンテンツにスキップ

ワーカーから耐久オブジェクトにアクセスする

ワーカーから耐久オブジェクトにアクセスするには、まずワーカープロジェクトのwrangler.tomlファイルに耐久オブジェクトバインディングを作成する必要があります。このバインディングは特定のクラスを使用するように設定され、そのクラスのインスタンスへのアクセスを制御します。

耐久オブジェクトバインディングは、ワーカーと耐久オブジェクト間の通信を可能にします。

Wrangler環境を使用している場合、使用したい耐久オブジェクトバインディングを環境ごとに指定する必要があります。

1. 耐久オブジェクトIDを作成する

耐久オブジェクトIDは、リクエストを送信する耐久オブジェクトを識別するために使用される64桁の16進数です。すべての64桁の16進数が有効なIDであるわけではありません。耐久オブジェクトIDはクラスに結びついています。

耐久オブジェクトIDを作成するには、次のいずれかの方法を選択できます。

  • IDをランダムに生成する。
  • 名前からIDを導出する(これらの名前は文字列データ型です)。
  • 以前に作成したIDを文字列から解析する。

これら3つの方法すべてで耐久オブジェクトIDを作成できます。

IDをランダムに生成する

次のコードは、新しい耐久オブジェクトIDを提供します。以下をワーカーコードに追加してください。

let id = OBJECT_NAMESPACE.newUniqueId();

耐久オブジェクト名前空間のnewUniqueId()メソッドは、新しい耐久オブジェクトIDをランダムに作成します。newUniqueId()は同じIDを2回返すことはありません。したがって、メソッドが返される時点で耐久オブジェクトはまだ存在せず、存在したこともありません。

IDをランダムに生成する際には、将来的に同じ耐久オブジェクトに再度アクセスするためにIDをどこかに保存する必要があります。たとえば、IDをWorkers KV、外部データベース、またはユーザーのブラウザのクッキーに保存できます。

ユニークIDは推測できません。URLベースのアクセス制御にユニークIDを使用できます。

外部ストレージにIDを保存するには、そのtoString()メソッドを使用して16進数の文字列に変換し、後でOBJECT_NAMESPACE.idFromString()を使用して文字列をIDに戻します。

名前からIDを導出する

次のコードを使用すると、名前(String)を使用して耐久オブジェクトのIDを抽出できます。

let id = OBJECT_NAMESPACE.idFromName(name);

パラメータ

  • name string
    • オブジェクト名、IDが導出される任意の文字列。

このメソッドは、指定された名前文字列からユニークな耐久オブジェクトIDを導出します。同じ名前を入力として与えた場合、常に同じIDを返します。

以前に作成したIDを文字列から解析する

let id = OBJECT_NAMESPACE.idFromString(hexId);

パラメータ

  • hexId string
    • 既存のIDのtoString()メソッドを呼び出して構築されたID文字列。

このメソッドは、以前に文字列化されたIDを解析します。これは、newUniqueId()を使用して作成されたIDと一緒に使用するのに便利です。これらのIDはどこかに文字列として保存する必要があります。

このメソッドは、newUniqueId()またはidFromName()によって元々作成されていないIDが渡された場合、例外をスローします。また、IDが異なる耐久オブジェクト名前空間のために元々作成された場合も例外をスローします。

2. IDを使用してスタブを構築する

IDを使用して耐久オブジェクトのスタブを構築します。スタブは、耐久オブジェクトにメッセージを送信するために使用されるクライアント耐久オブジェクトです。

let stub = env.EXAMPLE_CLASS.get(id);

3. fetch()ハンドラーメソッドを使用する

HTTPリクエストが耐久オブジェクトに送信されると、システムは耐久オブジェクト名前空間のfetch()メソッドを呼び出します。これらのリクエストは、パブリックインターネットからではなく、耐久オブジェクトバインディングを使用している他のワーカーから送信されます。

fetch()メソッドはRequestをパラメータとして受け取り、Response(またはResponsePromise)を返します。

メソッドが未処理の例外で失敗した場合、例外はfetch()リクエストを行った呼び出し元のワーカーにスローされます。

let response = await stub.fetch(request);