
在 Astro 中接入 Gemini API:从服务端接口开始
用 Astro API Route 封装模型调用,避免密钥泄露,并为流式输出留下扩展空间。
Astro 默认输出静态页面,但它同样可以通过服务端适配器提供 API Route。这是一种适合内容网站的组合:文章保持静态、快速且易于缓存,真正需要模型能力的功能再走服务端。
为什么不要在浏览器里调用
Gemini API 密钥不应出现在客户端代码中。即便环境变量经过构建工具注入,只要它进入浏览器 bundle,访问者就能读取。正确做法是让浏览器调用你自己的服务端路由,由路由读取私有环境变量并转发请求。
// src/pages/api/generate.ts
import type { APIRoute } from 'astro';
export const POST: APIRoute = async ({ request }) => {
const { prompt } = await request.json();
if (typeof prompt !== 'string' || !prompt.trim()) {
return new Response('Invalid prompt', { status: 400 });
}
// 在这里使用服务端环境变量调用 Gemini SDK。
return Response.json({ text: `收到:${prompt}` });
};
先把边界设计清楚
模型调用的工程问题通常不在 SDK 本身,而在接口边界。建议至少处理输入长度、请求超时、速率限制和错误结构。若功能允许匿名使用,还需要在网关层设置严格配额。
为流式输出预留空间
长回答如果等到全部生成后再返回,会让界面显得迟钝。后续可以把普通 JSON 响应替换为 ReadableStream,前端逐块读取并更新内容。先用非流式版本验证需求,再增加流式复杂度,通常是更稳妥的顺序。