教程 搜索 / 后端集成 / 在后端调用外部 API
📝 文字 ● 中级 更新于 2026-06-02

如何在后端调用 ElevenLabs 等外部 API?

简而言之:在后端控制台(lingcode.dev/backendsSettings → Secrets & integrations)中添加密钥,例如 ELEVENLABS_API_KEY。然后在应用中通过 client.functions.invoke('elevenlabs-tts', { text }) 调用——密钥永远不会离开服务器。对于其他服务,在 Allowed fetch hosts 中将其域名加入允许列表,再使用 client.functions.invoke('http-fetch', { url, headers }),以 {{MY_KEY}} 的形式引用密钥即可。

在 Web 应用中直接将第三方 API 密钥写进前端代码,是最危险的做法——密钥会出现在每位访客的浏览器里。正确的方式是将密钥保存在服务器上,由服务器代为调用服务。但仅仅为了藏一个密钥就专门搭建一台服务器,正是 LingCode Cloud 帮你省去的麻烦。你的托管后端本身就是那台服务器,可以帮你持有密钥并完成调用。

本教程以已连接托管后端为前提。让外部调用保持安全,需要两个关键组件:加密密钥存储(密钥保存在服务端,永远不会发送到浏览器)以及在后端运行、携带注入密钥发起出站请求的函数模板

你将学到什么

第一步——将密钥存为 Secret

打开 lingcode.dev/backends(使用与 IDE 相同的账号登录),选择你的后端,进入 Settings → Secrets & integrations。添加一个 UPPER_SNAKE 格式命名的 Secret,并粘贴对应的值——以 ElevenLabs 为例,就是 ELEVENLABS_API_KEY。该值在静态存储时会被加密(AES-256-GCM),控制台此后只显示密钥的名称,不再显示值本身。应用代码和网络请求均无法访问这个 Secret,只有后端函数才能读取它。

第二步——一行代码调用 ElevenLabs

系统内置了经过审核的 elevenlabs-tts 函数。在你的应用中(使用 AI 代理已为你接入的 LingCode SDK):

const { data } = await client.functions.invoke('elevenlabs-tts', {
  text: 'Hello from LingCode Cloud',
  // voice_id and model_id are optional
});
// data.audio_base64 is MP3 audio you can play:
new Audio('data:audio/mpeg;base64,' + data.audio_base64).play();

该函数在后端运行,从密钥库中读取 ELEVENLABS_API_KEY,调用 ElevenLabs 并返回音频数据。前端始终看不到密钥。如果你向 AI 代理提出需求("添加一个按钮,用 ElevenLabs 朗读这段文字"),代理知道这个模板的存在,会直接写出对应的调用代码。

第三步——用 http-fetch 调用任意其他 API

对于没有专用模板的服务,使用通用的 http-fetch——但首先需要在 Settings → Allowed fetch hosts将其域名加入允许列表(例如 api.openai.com)。然后:

const { data } = await client.functions.invoke('http-fetch', {
  url: 'https://api.openai.com/v1/responses',
  method: 'POST',
  headers: { Authorization: 'Bearer {{OPENAI_API_KEY}}', 'content-type': 'application/json' },
  body: { model: 'gpt-4o-mini', input: 'Say hi' },
});

其中的 {{OPENAI_API_KEY}} 占位符会在服务端被替换为你存储的 Secret——它永远不会出现在应用发出的请求中。data 包含响应的状态码、响应头以及响应体(JSON 时自动解析)。

为什么需要允许列表?

http-fetch 运行在 LingCode 的网络内部,如果允许"请求任意 URL",就会产生服务端请求伪造(SSRF)漏洞——恶意请求可能触达内部服务。允许列表就是防线:只有你明确添加的域名才可访问,且请求还会进一步阻止解析到任何私有或内部地址。允许列表为空等于禁止所有出站调用。像 elevenlabs-tts 这样的专用模板已预先绑定到固定的目标主机,无需配置允许列表。

密钥放在 Secrets 里,不要写进代码:整个方案的核心在于密钥存放在加密的密钥库中,只有后端才能读取。切勿将真实密钥粘贴到应用源代码、提示词或任何会发送到浏览器的环境中。若密钥泄露,请立即在服务提供商处轮换密钥,并更新对应的 Secret。

下一步