Client Basics
Client 调用来自 application,不来自 Step。下面的例子使用 order-123 这个 Flow ID。
启动 Flow
StartFlow 创建 Flow execution,并在 Dex Server 接受请求后立即返回。它接收已注册的 Flow、业务 Flow ID、start Step input 和 StartFlowOptions。
Flow ID 是 application 选择的身份。Dex Server 创建 Run ID。关于 timeout、request idempotency、ID reuse、retry、initial Attributes 和 config override,见 Flow options。
run_id = await app_state.client.start_flow(
app_state.client_apis, "order-123", "first order", start_options()
)
例子: examples/python/dex_examples/primitives/client-apis/controller.py
停止 Flow
StopFlow 关闭一个 active Flow。默认是请求它 cooperative cancellation。你也可以立刻 terminate,或者带 reason 把它标记为 failed。
await client.stop_flow("order-123", StopFlowOptions(reason="customer cancelled"))
例子: examples/python/dex_examples/products/job-post/controller.py
调用 RPC
InvokeRPC 调用 active Flow 上已注册的 RPC handler,并返回结果。
result = await client.invoke_rpc(flow.trigger, "order-123", "approved")
例子: examples/python/dex_examples/primitives/rpc/controller.py
读写 Flow 状态
应用应通过 Flow RPC 读写 Attribute、AttributeMap、Channel 和 ChannelMap 状态。为每个 command 或 query 定义 typed RPC,只选择它需要的状态,再用 InvokeRPC 调用。这样 authorization、validation、lock、transaction 和状态变更都会留在 Flow 内。
Client 仍提供 WaitForAttributeMatch 作为阻塞式 observation API。当应用需要等待已知的 scalar Attribute 条件,而不是读取任意状态快照时,使用这个接口。