所有文章 > API开发 > 使用 AWS Lambda 与 Fauna 构建类型安全无服务器 REST API 全流程指南
使用 AWS Lambda 与 Fauna 构建类型安全无服务器 REST API 全流程指南

使用 AWS Lambda 与 Fauna 构建类型安全无服务器 REST API 全流程指南

一. 项目概述

这篇文章将详细介绍如何使用 AWS LambdaFauna 数据库和 TypeScript 构建一个健壮、可扩展且类型安全的无服务器 REST API。通过本文的学习,你将掌握以下技能:

  • 使用 Fauna 作为数据层,通过 Lambda 函数执行 CRUD(创建、读取、更新、删除)操作
  • 使用无服务器框架管理 Fauna 数据库
  • 使用无服务器框架管理和部署应用程序

二. 为什么选择 Fauna 和无服务器框架?

在开始之前,我们需要了解 Fauna 和无服务器框架的基本概念,以及它们结合使用的优势。

Fauna 是一个无服务器、全球分布式的数据库,提供灵活且可扩展的数据存储。它让开发者无需担心服务器或基础设施管理,从而专注于应用程序的开发。

无服务器框架 提供了一套工具和抽象,简化了无服务器应用的部署和管理过程。它能够高效地构建和部署功能,同时管理云资源。

将 Fauna 与无服务器框架结合使用,可以实现以下优势:

  • 降低复杂性:无缝整合的架构减少了开发和管理的复杂性
  • 快速开发:开发者可以更专注于业务逻辑,而非基础设施
  • 高可扩展性:支持应用程序的快速扩展,满足业务增长需求

简而言之,这种组合让开发者可以专注于创建高质量的应用,而无需担心服务器管理或数据库扩展的细节。


三. 应用架构概览

下图展示了我们将要构建的应用程序架构:

应用架构图

在该架构中:

  • API 网关:作为入口点,将请求路由到相应的 Lambda 函数
  • Lambda 函数:执行对库存项目的 CRUD 操作
  • Fauna 数据库:存储和查询库存数据

四. 创建无服务器项目

首先,运行以下命令创建一个新的无服务器项目:

serverless create --template aws-nodejs-typescript

我们选择 aws-nodejs-typescript 模板,它提供了大量的基础代码,避免从零开始编写。

接下来,安装必要的依赖项:

npm install serverless-fauna serverless-dotenv-plugin --save

五. 配置 Fauna 数据库

打开项目目录中的 serverless.yml 文件,添加以下代码以定义 Fauna 资源:

resources:
  Resources:
    Inventory:
      Type: "AWS::Serverless::Function"
      Properties:
        Handler: handler.main
        Runtime: nodejs14.x

上述代码创建了一个名为 Inventory 的数据库集合。

1. 添加 Fauna 密钥

a. 生成密钥

  1. 登录 Fauna 控制台
  2. 为数据库生成一个新的服务器密钥

b. 配置环境变量

在项目根目录下创建 .env 文件,添加以下内容:

FAUNA_SECRET=你的密钥
FAUNA_DOMAIN=db.fauna.com

六. 配置 Lambda 函数

serverless.yml 文件中添加 Lambda 函数配置:

functions:
  createItem:
    handler: handler.create
    events:
      - http:
          path: inventory/create
          method: post
  readItem:
    handler: handler.read
    events:
      - http:
          path: inventory/read
          method: get
  updateItem:
    handler: handler.update
    events:
      - http:
          path: inventory/update
          method: put
  deleteItem:
    handler: handler.deleteItem
    events:
      - http:
          path: inventory/delete
          method: delete

七. 编写 Lambda 函数代码

安装 Fauna SDK:

npm install faunadb

打开 handler.ts 文件,添加以下代码:

import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
import { Client, query as q } from 'faunadb';

const client = new Client({
  secret: process.env.FAUNA_SECRET!,
  domain: process.env.FAUNA_DOMAIN || 'db.fauna.com',
});

export const create = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
  const data = JSON.parse(event.body || '{}');
  const result = await client.query(q.Create(q.Collection('Inventory'), { data }));
  return {
    statusCode: 200,
    body: JSON.stringify(result),
  };
};

export const read = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
  const id = event.queryStringParameters?.id;
  const result = await client.query(q.Get(q.Ref(q.Collection('Inventory'), id)));
  return {
    statusCode: 200,
    body: JSON.stringify(result),
  };
};

export const update = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
  const id = event.queryStringParameters?.id;
  const data = JSON.parse(event.body || '{}');
  const result = await client.query(q.Update(q.Ref(q.Collection('Inventory'), id), { data }));
  return {
    statusCode: 200,
    body: JSON.stringify(result),
  };
};

export const deleteItem = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
  const id = event.queryStringParameters?.id;
  const result = await client.query(q.Delete(q.Ref(q.Collection('Inventory'), id)));
  return {
    statusCode: 200,
    body: JSON.stringify(result),
  };
};

上述代码实现了以下功能:

  • 创建:将新项目添加到库存
  • 读取:根据参数获取特定项目或完整列表
  • 更新:修改现有项目
  • 删除:删除指定项目

八. 部署和清理资源

1. 部署项目

运行以下命令部署无服务器堆栈:

serverless deploy

2. 清理资源

若需删除 AWS 和 Fauna 中的所有资源,可以运行以下命令:

serverless remove

九. 总结

通过本文教程,你学习了如何结合使用 FaunaAWS Lambda 和 TypeScript 构建一个无服务器 REST API。我们从项目创建、数据库配置到 Lambda 函数实现,逐步完成了整个流程。希望这篇文章能帮助你快速上手无服务器开发,并为你的项目提供灵感。

原文链接: https://fauna.com/blog/building-a-serverless-rest-api-with-fauna-aws-and-typescript

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费