# 查询产物处理链路

读取一个工作流产物的完整处理链路，包括来源文件、工作流调用和处理拓扑。

```text
GET https://moi.matrixorigin.cn/newmoi/lineage/artifacts/{artifact_id}/overview
```

## 调用前准备

先[查询文件处理链路](get-file-lineage.md)，从响应的 `data.artifact.artifact_id` 取得产物 ID。准备有目标工作区访问权限的个人访问令牌、目标工作区 ID 和产物 ID。

下方示例使用：

- `$AI_STUDIO_API_KEY`：实际个人访问令牌，通过 `X-API-Key` Header 传递。
- `$WORKSPACE_ID`：目标工作区 ID，通过 `X-Workspace-ID` Header 传递。
- `$ARTIFACT_ID`：要查询处理链路的工作流产物 ID，取自文件处理链路响应的 `data.artifact.artifact_id`。

## 路径参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `artifact_id` | string | 工作流产物 ID，取自文件处理链路的 `data.artifact.artifact_id`。 |

## 请求示例

```bash
curl "https://moi.matrixorigin.cn/newmoi/lineage/artifacts/$ARTIFACT_ID/overview" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

## 成功响应

`data` 返回产物、工作流调用和处理拓扑。拓扑包含关联节点，不表示每个节点都直接处理了该产物。

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "artifact": {
      "artifact_id": "art-001",
      "root_asset_id": "asset-001",
      "case_id": "case-001",
      "parsed_file_available": true
    },
    "workflow": {
      "workflow_id": "wf-001",
      "workflow_version_id": "ver-001"
    },
    "workflow_invocation": {
      "input": {},
      "vars": {}
    },
    "topology": {
      "nodes": [
        {
          "node_id": "node-001",
          "label": "解析文件",
          "status": "success"
        }
      ],
      "edges": [],
      "producer_node_id": "node-001"
    },
    "entry": {}
  }
}
```

响应字段如下。

本文中，字段路径中的 `[]` 表示数组中的每一项。例如，`items[].name` 表示 `items` 数组中每一项的 `name` 字段。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | string | 成功时为 `OK`。 |
| `msg` | string | 成功时为 `OK`。 |
| `data.artifact.artifact_id` | string | 产物 ID。 |
| `data.artifact.root_asset_id` | string | 根数据资产 ID。 |
| `data.artifact.case_id` | string | 关联案例 ID。 |
| `data.artifact.parsed_file_available` | boolean | 解析后的文件是否可用。 |
| `data.workflow.workflow_id` | string | 工作流 ID；仅在有值时返回。 |
| `data.workflow.workflow_version_id` | string | 工作流版本 ID；仅在有值时返回。 |
| `data.workflow_invocation.input` | object | 工作流调用输入；仅在有值时返回。 |
| `data.workflow_invocation.vars` | object | 工作流调用变量；仅在有值时返回。 |
| `data.topology.nodes[]` | array | 处理节点，节点可包含 `node_id`、`label`、`status`、`duration_ms` 和 `error`。 |
| `data.topology.edges[]` | array | 拓扑边，包含 `source_node_id` 和 `target_node_id`。 |
| `data.topology.producer_node_id` | string | 产生当前产物的节点 ID；仅在有值时返回。 |
| `data.entry.catalog_file_id` | string | 入口文件 ID；仅在有值时返回。 |
| `data.entry.volume_id` | string | Volume ID；仅在有值时返回。 |

## 错误响应

```json
{
  "code": "ErrNotFound",
  "msg": "资源不存在",
  "data": null
}
```

### 常见 HTTP 错误

```{list-table}
:header-rows: 1
:widths: 12 22 32 34

* - HTTP 状态码
  - 错误代码
  - 常见原因
  - 建议操作
* - `400`
  - `ErrParamInvalid`
  - `artifact_id` 无效。
  - 检查路径参数。
* - `401`
  - `ErrUnauthorized`
  - 凭据缺失或无效。
  - 检查 API Key。
* - `403`
  - `ErrPermissionDenied`
  - 当前身份没有读取权限。
  - 使用有权限的凭据，或联系管理员授权。
* - `404`
  - `ErrNotFound`
  - 产物、Case 或处理记录不存在。
  - 检查 `artifact_id`。
* - `500`
  - `ErrServer`
  - 服务端无法读取产物处理链路。
  - 记录请求时间和错误信息后重试。
* - `503`
  - `ErrServer`
  - 血缘依赖服务不可用。
  - 稍后重试。
```

## 后续操作

[查询产物处理节点详情](get-lineage-node.md)。
