我如何将 Google Sheets 变成使用 AWS Serverless 的超高速 REST API
Source: Dev.to
请提供您希望翻译的完整文本内容,我将按照要求保留原始的 Markdown 格式、代码块和链接,仅翻译正文部分为简体中文。谢谢!
介绍
我们都有过这种经历:需要为原型、内部工具或 NoCode 项目快速搭建后端。部署 PostgreSQL 或 MongoDB 觉得太繁琐,于是想,“我就直接把 Google Sheets 当数据库用吧!”
听起来不错,直到你面对 Google Sheets API 的现实:
- 它很慢(每次请求通常需要 1–2 秒)。
- 速率限制严格(每位用户每分钟大约只能请求 60 次)。
- 没有原生查询语言(过滤数据非常麻烦)。
我想要 Google Sheets 的简易性,同时又想要真实后端的性能和安全性。因此,我构建了 SheetToJSON,一个无服务器的包装器,专门解决这些问题。
架构堆栈
- 路由: AWS HTTP API Gateway
- 计算: AWS Lambda (Node.js ARM64)
- 缓存: Amazon S3
- 安全与认证: Amazon DynamoDB
- 变现与网关: RapidAPI
挑战 1:突破速率限制和延迟
最大的瓶颈是响应时间。为了解决这个问题,我实现了使用 Amazon S3 的积极缓存策略。
当用户发起 GET 请求(例如,获取产品列表)时,Lambda 函数首先检查 S3 桶中是否有该表的缓存 .json 版本。
- Cache Hit: 缓存命中: 数据在毫秒级返回。
- Cache Miss: 缓存未命中: Lambda 从 Google Sheets 获取数据,将原始 JSON 保存到 S3(TTL 为 5 分钟),并返回响应。
为保持数据新鲜,我添加了 write‑through cache:任何 POST、PATCH 或 DELETE 请求都会更新 Google Sheets 并且立即重写本地 S3 缓存。结果是 GET 请求闪电般快速,同时不牺牲新鲜度。
Challenge 2: Smart Querying (No Database Engine)
Google Sheets 没有 SQL 引擎。如果用户想要查找所有价格大于 $50 的产品,通常需要下载整个表格并在客户端进行过滤。
我在 Lambda 函数中直接构建了一个自定义查询引擎。读取 S3 缓存时,API 会拦截查询参数并在内存中处理它们:
// Example: GET /v1/SPREADSHEET_ID/Products?price=gt:50&sort=price:desc
// The API engine automatically parses:
// "gt:" (greater than)
// "lt:" (less than)
// "lk:" (like/contains)
// before returning the paginated payload.
这使得一个普通的电子表格变成了可查询的类 NoSQL 数据库。
挑战 3:多租户安全(防止 IDOR)
如果你在构建 SaaS,安全是你的 #1 优先事项。由于 API 使用单个 Google Service Account 读取表格,什么能阻止用户 A 猜测用户 B 的 Spreadsheet ID 并读取他们的数据?
为防止这种 Insecure Direct Object Reference (IDOR),我添加了一个强制性的 /register 步骤,后端使用 DynamoDB。
- 用户注册他们的表格;API 将其
X‑RapidAPI‑UserID 与 DynamoDB 中的spreadsheetId关联。 - 每个 CRUD 请求都会执行一次快速(约
~15 ms)的 DynamoDB 查询。 - 如果请求者的用户 ID 与表格所有者的 ID 不匹配,API 将返回 403 Forbidden。
零数据泄露。
结果:开发者体验优先
我希望集成尽可能无缝,因此我发布了零依赖、官方的 Node.js 和 PHP SDK。
Node.js 示例(使用 TypeScript 完全类型化)
import { SheetToJSON } from 'sheettojson-api';
const db = new SheetToJSON('YOUR_RAPIDAPI_KEY');
const response = await db.get('SPREADSHEET_ID', 'Products', {
limit: 10,
price: 'gt:50'
});
console.log(response.data);
试一试!
构建这个项目是一次令人惊叹的 AWS Serverless 架构之旅。如果你正在构建 NoCode 工具、快速原型,或需要即时后端,快来试一试吧。
我目前正在征求对缓存系统和查询引擎的反馈。请在评论中告诉我你的想法!👇