全球分布式 REST API 构建指南:Cloudflare Workers + Fauna 实战
确保您的应用程序在全球范围内的速度、可靠性和可访问性不再只是一个选择,而是一种必需品。通过结合使用 Cloudflare 的 CDN 和 Fauna 的全球分布式数据库,您可以轻松构建 REST API,从而在全球范围内提供卓越的速度、可靠性、低延迟和扩展性。Cloudflare Workers 和 Fauna 后端特别适合需要低延迟、全球分布和高扩展性的应用程序场景,例如实时数据分析平台、游戏后端、聊天应用程序、视频和音乐共享平台以及电子商务应用程序。本文将详细演示如何使用 Cloudflare Workers 和 Fauna 构建一个全球化的无服务器 REST API。
学习目标
- 掌握如何在 Cloudflare Workers 函数中存储和检索 Fauna 数据。
- 学习使用 Wrangler 命令行界面(CLI)进行项目管理。
- 了解如何在本地运行和测试 Cloudflare Workers 函数。
通过结合 Fauna 和 Cloudflare Workers,您可以在单个代码库中创建一个全球分布式、强一致性、完全无服务器的 REST API。这种架构既保留了单体应用开发的便利性,又具备分布式应用在边缘运行的弹性和低延迟优势。
开始构建 REST API
安装 Wrangler CLI 并创建项目
首先,确保您拥有一个 Cloudflare 账户。然后,使用以下命令全局安装 Wrangler CLI:
npm install -g @cloudflare/wrangler
安装完成后,创建一个新的 Cloudflare Workers 项目:
npx create-cloudflare@latest
在 CLI 提示中,输入项目目录名称,并选择“Hello World”Worker 选项。随后,选择使用 TypeScript 和 Git。
完成项目创建后,进入项目目录并运行以下命令启动应用程序:
wrangler dev
访问 http://127.0.0.1:8787/,确保 Worker 函数正常运行。
配置 Fauna 数据库
- 登录 Fauna Dashboard 并创建一个新数据库。
- 为数据库命名,选择“全球区域组”,然后点击“创建”。
- 在数据库资源管理器中,创建一个名为
inventory的集合。 - 生成一个服务器角色的管理密钥,并将其保存下来。该密钥以
fn开头,将用于连接到数据库。
集成 Fauna 到 Cloudflare Workers
在本地终端中运行以下命令,将 Fauna 的 npm 包添加到项目中:
npm install faunadb
然后,在 wrangler.toml 文件中添加一个名为 FAUNA_SECRET 的环境变量,并将其值设置为之前生成的 Fauna 密钥。
在代码中,导入 faunadb 库并初始化 Fauna 客户端:
import { Client, query as q } from 'faunadb';
const client = new Client({
secret: process.env.FAUNA_SECRET,
});
实现 REST API 端点
GET 端点
通过以下代码实现 GET 请求端点,用于获取集合中的所有项目或通过 ID 获取单个项目:
case 'GET': {
const url = new URL(request.url);
const id = url.searchParams.get('id');
if (id) {
const item = await client.query(q.Get(q.Ref(q.Collection('inventory'), id)));
return new Response(JSON.stringify(item), { status: 200 });
} else {
const items = await client.query(q.Map(
q.Paginate(q.Documents(q.Collection('inventory'))),
q.Lambda('ref', q.Get(q.Var('ref')))
));
return new Response(JSON.stringify(items), { status: 200 });
}
}
POST 端点
实现 POST 请求端点,用于向集合中添加新项目:
case 'POST': {
const data = await request.json();
const item = await client.query(
q.Create(q.Collection('inventory'), { data })
);
return new Response(JSON.stringify(item), { status: 201 });
}
PUT 端点
实现 PUT 请求端点,用于通过 ID 更新集合中的项目:
case 'PUT': {
const url = new URL(request.url);
const id = url.searchParams.get('id');
const data = await request.json();
if (id) {
const updatedItem = await client.query(
q.Update(q.Ref(q.Collection('inventory'), id), { data })
);
return new Response(JSON.stringify(updatedItem), { status: 200 });
} else {
return new Response('ID is required', { status: 400 });
}
}
DELETE 端点
实现 DELETE 请求端点,用于通过 ID 删除集合中的项目:
case 'DELETE': {
const url = new URL(request.url);
const id = url.searchParams.get('id');
if (id) {
await client.query(q.Delete(q.Ref(q.Collection('inventory'), id)));
return new Response('Item deleted', { status: 200 });
} else {
return new Response('ID is required', { status: 400 });
}
}
使用 itty-router 优化代码
为了更好地组织代码,可以使用 itty-router 路由器。首先安装该库:
npm install itty-router
以下是使用 itty-router 重构后的代码示例:
import { Router } from 'itty-router';
const router = Router();router.get('/inventory', async () => {
const items = await client.query(q.Map(
q.Paginate(q.Documents(q.Collection('inventory'))),
q.Lambda('ref', q.Get(q.Var('ref')))
));
return new Response(JSON.stringify(items), { status: 200 });
});router.post('/inventory', async (request) => {
const data = await request.json();
const item = await client.query(
q.Create(q.Collection('inventory'), { data })
);
return new Response(JSON.stringify(item), { status: 201 });
});// 更多路由...addEventListener('fetch', (event) =>
event.respondWith(router.handle(event.request))
);
总结
通过本教程,您学习了如何结合使用 Fauna 和 Cloudflare Workers 构建一个全球分布式、强一致性、无服务器的 REST API。该 API 能够快速、准确地向全球用户提供数据,同时具备高扩展性和低延迟的优势。尝试不同的请求,并在 Fauna 仪表板中验证数据的插入和更新是否符合预期。希望本教程能为您的项目提供有价值的参考!
原文链接: https://fauna.com/blog/build-a-global-rest-api-with-cloudflare-and-fauna
最新文章
- 7 个创新的照片编辑 API
- 2025 Web Agent RPA 2.0|浏览器自动化场景落地路径与开源代码仓库
- 构建高效API的10个API设计最佳实践
- 针对API漏洞挖掘技巧学习
- Python实现免费百度天气API调用,获取最新实时天气数据
- 如何监控 Kubernetes API Server – Sysdig
- python并行组合生成原理及实现
- 终极对决:KimiGPT与GLM-4文本生成模型API深度比较
- 如何获取OpenWeather API Key 密钥(分步指南)
- 从Talkie到DeepSeek:揭秘AI应用出海的盈利路径
- 确保OAuth 2.0访问令牌安全,使用持有者凭证证明
- 利用JAVA语言调用豆包大模型接口实战指南