# 基础能力与 Resource Binding

了解当前工作区可申请的数据库与浏览器能力，以及申请、绑定、鉴权和生命周期边界。

基础能力是由平台统一提供、可以被项目、智能体或自动化复用的工作区资源。Resource Binding（资源绑定）
用于让一个消费者选择已经创建的资源；它保存稳定引用，不复制资源本身，也不把密码、Token 或连接串写进
应用配置。

当前公开、可由工作区申请或创建的基础能力只有两类：数据库服务 `workspace-db-service` 和浏览器会话服务
`browser-session`。具体工作区是否可用、当前方法名、参数、规格、价格与配额，必须从该工作区当前 Runtime
的服务和 `methodDefinition` 实时读取。

## 当前能力

| 能力  | Runtime 服务             | 申请或创建的资源                                                              | 绑定时使用的身份                          |
| --- | ---------------------- | --------------------------------------------------------------------- | --------------------------------- |
| 数据库 | `workspace-db-service` | 共享测试数据库，或付费独享 Database Instance 中的 Database Profile（Logical Database） | `profileRef`                      |
| 浏览器 | `browser-session`      | Browser Profile，以及基于 Profile 按需创建的 Browser Session                    | Browser Profile ID；精确字段以消费者方法定义为准 |

### 数据库服务

数据库服务提供两条路径：

- 开发和测试可以申请共享测试数据库。`createSharedTestDatabase` 会创建可绑定的数据库 Profile，并返回
  `profileRef`；首次返回的 Profile Token 必须放入安全的 Secret 存储。
- 需要独享实例时，先通过 `listDatabaseInstancePlans` 读取实时规格与积分价格，再使用返回的 `offerId`
  调用 `createDatabaseInstanceOrder`。实例可用后，通过 `createLogicalDatabase` 创建 Database Profile。

应用绑定的是 Database Profile 的 `profileRef`，不是云厂商实例地址，也不是订单或 Database Instance ID。
创建绑定不会再次购买实例；解除绑定也不会自动删除逻辑数据库或实例。Hosted Service 的详细资源和计费
关系见 [Project、Environment、Slot、Endpoint 与数据库](/development/backend-development/hosted-services-and-databases/)。

### 浏览器会话服务

浏览器能力由 Browser Profile 和 Browser Session 两层组成：

1. 使用 `createBrowserProfile` 创建或按业务规则复用 Profile。Profile 保存需要延续的浏览器上下文。
2. 使用 `createBrowserSession` 从目标 Profile 创建一次运行会话；会话按需启动和关闭。

Browser Session 不是 Redis 一类长期基础设施实例，也没有独立购买流程。消费者应保存 Profile 的稳定身份，
在需要操作浏览器时再创建 Session；不要把 viewer URL、临时会话 ID 或登录态当成长期资源绑定。

需要用浏览器录制网页操作时，继续阅读
[浏览器录制生成个性化 Bundle](/development/bundle-development/advanced/browser-recording-to-bundle/)。

## 申请与绑定流程

### 1. 确认账号和工作区

```bash
baijimu auth status --verify
baijimu workspace current
```

申请和绑定都作用于当前工作区。不要从页面 URL、历史日志或另一个工作区复制资源 ID。

### 2. 从当前 Runtime 发现服务

```bash
baijimu runtime services list <WORKSPACE_ID> \
  --keyword workspace-db-service \
  --json

baijimu runtime services list <WORKSPACE_ID> \
  --keyword browser-session \
  --json
```

保存返回的准确 `businessId`。服务不可见时，先确认当前工作区、默认 Runtime 和已安装版本，不要绕过 CLI
调用内部地址，也不要把其他工作区的 `businessId` 写成默认值。

### 3. 读取目标方法定义

```bash
baijimu runtime service get <WORKSPACE_ID> <BUSINESS_ID> \
  --method <METHOD_NAME> \
  --json
```

数据库按目标读取 `createSharedTestDatabase`，或
`listDatabaseInstancePlans`、`createDatabaseInstanceOrder`、`createLogicalDatabase`；浏览器按目标读取
`createBrowserProfile` 和 `createBrowserSession`。请求体只使用返回的 `methodDefinition` 中存在的字段。

### 4. 创建资源

把按方法定义准备的参数保存到文件，再调用服务：

```bash
baijimu runtime service call <WORKSPACE_ID> <BUSINESS_ID> <METHOD_NAME> \
  --params @request.json \
  --json
```

数据库付费路径必须先读取实时目录，并把目录返回的 `offerId` 用于下单；不得在脚本中固定 SKU、价格、地域
或云厂商规格。浏览器路径先取得 Profile，再用该 Profile 创建 Session。

### 5. 保存稳定引用并完成绑定

- 数据库只把 `profileRef` 交给支持数据库 Provider 的消费者；密码和 Profile Token 进入 Secret。
- 浏览器只把 Browser Profile ID 交给明确支持浏览器能力的消费者；Session 由运行任务按需创建。
- 绑定前校验资源与消费者属于同一工作区，并确认资源仍处于可用状态。
- 绑定后执行一次真实功能验证：数据库建立连接并完成无副作用查询；浏览器创建 Session、打开测试页面，
  然后正常关闭会话。

消费者支持的绑定类型以它自己的当前方法定义为准。看到基础能力不代表任意 Project、应用、智能体或工作流
都能自动绑定该能力。

## Resource Binding 不是什么

- **不是资源申请。** 先由能力 Provider 创建资源，再由消费者保存引用；绑定本身不创建数据库实例或
  Browser Profile。
- **不是凭据容器。** 绑定保存引用，Secret 保存敏感值。连接串、密码、Profile Token、Cookie 和临时 URL
  不得进入项目 Git、Bundle Manifest、Artifact 或普通日志。
- **不是方法授权。** 平台应用的 `methodDefinitions` 描述允许调用哪些 Runtime 方法，和选择哪一个资源是
  两个不同边界。
- **不是资源所有权转移。** 解除绑定、停止 Environment 或结束 Session 不会自动删除 Provider 拥有的
  长期资源；删除必须走该资源自己的生命周期。

## 当前不提供 Redis 资源

平台当前没有面向工作区公开的 Redis 申请、购买或 Resource Binding 产品。平台内部服务可能使用 Redis，
私有部署环境也可能要求环境所有者准备 Redis，但这些都属于平台或部署环境基础设施，不是用户可以在
工作区申请的基础能力。

同样，MySQL、对象存储、Kubernetes、网络和负载均衡等私有部署资源也不能因为出现在环境清单中，就写成
工作区可申请产品。Hosted Service Slot 是后端应用的托管计算产品，也不属于这里的通用基础能力目录。

> **以当前 Runtime 为准**
>
> 本文说明稳定的产品边界和标准流程。能力是否可见、方法参数、规格、价格、配额和消费者支持范围都可能随
> 工作区安装版本变化；执行前始终读取当前 Runtime 服务及目标方法的 `methodDefinition`。
