You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数无法调用Foundry内部API?求可用TypeScript API示例与方案

Foundry内部API调用失败原因及TypeScript实现方案

常见失败原因

  • 权限不足:Foundry API要求调用身份具备对应资源的权限(如数据集读写、函数执行权限),若函数运行身份无权限会直接报错。
  • 路径错误:内部API无需完整域名,需使用相对路径或内部服务路径,误用公开API的完整域名会导致失败。
  • 认证冲突:内部调用无需手动传递Bearer Token,Foundry会自动注入身份上下文,手动添加认证头反而会引发冲突。
  • 前端CORS限制:若在前端代码中调用,可能触发CORS,但后端函数调用不存在此问题。

TypeScript内部API调用示例

Foundry官方提供了TypeScript SDK,可直接导入使用,简化调用流程:

1. 依赖配置

在函数的package.json中添加官方SDK依赖:

{
  "dependencies": {
    "@foundry/functions-api": "^1.0.0",
    "@foundry/rest-api-client": "^1.0.0"
  }
}

2. 数据集API调用示例(读取记录)

import { FoundryRestApiClient } from "@foundry/rest-api-client";
import { FunctionExecutionContext } from "@foundry/functions-api";

export async function fetchDatasetRecords(context: FunctionExecutionContext): Promise<any[]> {
    // 初始化客户端,自动继承当前函数的执行身份
    const client = await FoundryRestApiClient.create(context);
    
    // 替换为你的数据集RID和视图RID
    const targetDatasetRid = "ri.foundry.main.dataset.your-dataset-rid";
    const targetViewRid = "ri.foundry.main.dataset.view.your-view-rid";
    
    const recordsResponse = await client.datasets.records.getRecords({
        datasetRid: targetDatasetRid,
        viewRid: targetViewRid,
        limit: 100
    });
    
    return recordsResponse.data;
}

3. 通用内部API调用示例

如果需要调用非数据集类的内部API,可使用通用请求方法:

import { FoundryRestApiClient } from "@foundry/rest-api-client";
import { FunctionExecutionContext } from "@foundry/functions-api";

export async function callCustomInternalApi(context: FunctionExecutionContext): Promise<any> {
    const client = await FoundryRestApiClient.create(context);
    
    // 内部调用使用相对路径,示例为调用另一函数的执行API
    const apiResponse = await client.request({
        method: "POST",
        url: "/functions/api/v1/functions/ri.foundry.main.function.target-function-rid/execute",
        data: {
            input: { param1: "value1", param2: "value2" }
        }
    });
    
    return apiResponse.data;
}

推荐实践

  • 优先使用官方SDK:@foundry/rest-api-client封装了认证、路径处理、错误捕获等逻辑,比手动写fetch更稳定可靠。
  • 校验权限配置:在Foundry控制台中,确认函数所在项目拥有目标资源的权限,且函数执行身份(默认是项目服务账户)已被授予对应权限。
  • 日志调试:在函数中添加日志输出,打印请求状态码和错误信息(如console.error("API调用失败:", response.status, response.data)),快速定位问题。
  • 避免硬编码RID:通过函数参数传入RID,或使用Foundry的数据集绑定功能,让函数直接关联目标资源,减少硬编码维护成本。

内容的提问来源于stack exchange,提问作者Max Magid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:15:32