INTEGRITY Dokumentace

Durable Object ID

Popis

ID Durable Object je 64místní hexadecimální číslo, které identifikuje Durable Object. Ne všechna 64místná hexadecimální čísla jsou platná ID. ID Durable Object se nevytvářejí přímo, ale nepřímo pomocí DurableObjectNamespace rozhraní.

DurableObjectId rozhraní odkazuje na nový nebo existující Durable Object. Toto rozhraní se nejčastěji používá v DurableObjectNamespace::get pro získání DurableObjectStub pro odesílání požadavků do Durable Object. Vytvoření ID pro Durable Object ještě neznamená, že se Durable Object vytvoří. Durable Object vznikne líně, až po vytvoření stubu z DurableObjectId. Tím se zajistí, že se objekty nevytvoří, dokud k nim skutečně nedojde k přístupu.

Metody

toString

toString převádí DurableObjectId na 64místní hexadecimální řetězec. Tento řetězec se hodí pro protokolování nebo pro uložení DurableObjectId jinde, například v session cookie. Tento řetězec lze použít k rekonstrukci DurableObjectId prostřednictvím DurableObjectNamespace::idFromString.

// Create a new unique ID
const id = env.MY_DURABLE_OBJECT.newUniqueId();
// Convert the ID to a string to be saved elsewhere, e.g. a session cookie
const session_id = id.toString();

...
// Recreate the ID from the string
const id = env.MY_DURABLE_OBJECT.idFromString(session_id);

Parametry

Návratové hodnoty

equals

equals se používá k porovnání rovnosti dvou instancí DurableObjectId.

const id1 = env.MY_DURABLE_OBJECT.newUniqueId();
const id2 = env.MY_DURABLE_OBJECT.newUniqueId();
console.assert(!id1.equals(id2), "Different unique ids should never be equal.");
id1 = env.MY_DURABLE_OBJECT.newUniqueId()
id2 = env.MY_DURABLE_OBJECT.newUniqueId()
assert not id1.equals(id2), "Different unique ids should never be equal."

Parametry

Návratové hodnoty

Vlastnosti

name

name je volitelnou vlastností DurableObjectId, která vrací název použitý k vytvoření DurableObjectId prostřednictvím DurableObjectNamespace::idFromName. Tato hodnota je nedefinovaná, pokud DurableObjectId byl vytvořen pomocí DurableObjectNamespace::newUniqueId.

name vlastnost je dostupná také na ctx.id uvnitř Durable Object, pokud volající použije idFromName() nebo getByName(). ctx.id.name bude undefined v následujících případech:

const uniqueId = env.MY_DURABLE_OBJECT.newUniqueId();
const fromNameId = env.MY_DURABLE_OBJECT.idFromName("foo");
console.assert(uniqueId.name === undefined, "unique ids have no name");
console.assert(
	fromNameId.name === "foo",
	"name matches parameter to idFromName",
);
const uniqueId: DurableObjectId = env.MY_DURABLE_OBJECT.newUniqueId();
const fromNameId: DurableObjectId = env.MY_DURABLE_OBJECT.idFromName("foo");
console.assert(uniqueId.name === undefined, "unique ids have no name");
console.assert(
	fromNameId.name === "foo",
	"name matches parameter to idFromName",
);
unique_id = env.MY_DURABLE_OBJECT.newUniqueId()
from_name_id = env.MY_DURABLE_OBJECT.idFromName("foo")
assert unique_id.name is None, "unique ids have no name"
assert from_name_id.name == "foo", "name matches parameter to idFromName"

Stejné name je uvnitř Durable Object dostupný přes ctx.id.name:

import { DurableObject } from "cloudflare:workers";

export class ChatRoom extends DurableObject {
	async getRoomName() {
		return this.ctx.id.name; // "foo" when accessed via getByName("foo")
	}
}
import { DurableObject } from "cloudflare:workers";

export class ChatRoom extends DurableObject<Env> {
	async getRoomName(): Promise<string | undefined> {
		return this.ctx.id.name; // "foo" when accessed via getByName("foo")
	}
}
from workers import DurableObject

class ChatRoom(DurableObject):
    async def get_room_name(self):
        return self.ctx.id.name  # "foo" when accessed via get_by_name("foo")

jurisdiction

jurisdiction je volitelnou vlastností DurableObjectId, která vrací jurisdikce na kterou je ID omezeno, například "eu" nebo "fedramp". Stejná hodnota je uvnitř Durable Object dostupná přes ctx.id.jurisdiction, a to i v obslužné rutiny alarmů a objekty, ke kterým se přistupuje přes idFromString(), takže můžete činit rozhodnutí s ohledem na region, aniž byste jurisdikci předávali jako argument nebo ji ukládali do úložiště.

jurisdiction se zachová u každého způsobu vytvoření ID, včetně:

ctx.id.jurisdiction je undefined ve dvou případech:

const plainId = env.MY_DURABLE_OBJECT.idFromName("foo");
const euId = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo");
console.assert(plainId.jurisdiction === undefined, "no jurisdiction set");
console.assert(euId.jurisdiction === "eu", "jurisdiction matches namespace");
plain_id = env.MY_DURABLE_OBJECT.idFromName("foo")
eu_id = env.MY_DURABLE_OBJECT.jurisdiction("eu").idFromName("foo")
assert plain_id.jurisdiction is None, "no jurisdiction set"
assert eu_id.jurisdiction == "eu", "jurisdiction matches namespace"