利用 Serverless 实现一个完整的 REST API

阅读时长 14 分钟读完

Serverless 是一种基于云计算的架构模式,它将应用程序中的业务逻辑与底层基础设施分离开来。使用 Serverless 架构,您可以构建可伸缩、稳定、可靠的应用程序,而无需管理服务器或基础架构。

在本文中,我们将探讨如何使用 Serverless 架构来实现一个完整的 REST API。我们将使用 AWS Lambda 和 API Gateway 来创建 REST API,同时使用 Amazon DynamoDB 存储数据。此外,我们将探讨如何使用 Serverless Framework 来自动化构建和部署应用程序。

准备工作

在开始之前,您需要执行以下操作:

  • 创建 AWS 账户(如果您还没有 AWS 账户)。
  • 安装 Node.js 和 npm。
  • 安装 Serverless Framework。

创建 Serverless 项目

使用 Serverless Framework 可以快速、简单地创建 Serverless 项目。在您的终端中,执行以下命令来创建一个新项目:

该命令将创建一个名为 my-rest-api 的新目录,并在其中创建一个名为 handler.js 的文件。该文件包含了一个简单的函数来处理 HTTP 请求。

创建 REST API

现在,我们将创建一个 REST API,以便我们的客户端可以向我们的应用程序发送请求。在 serverless.yml 文件中添加以下内容:

-- -------------------- ---- -------
-------- -----------
---------
  ----- ---
  -------- ----------
----------
  -----------
    -------- ------------------
    -------
      - -----
          ----- -----
          ------- ----
  --------
    -------- ---------------
    -------
      - -----
          ----- ----------
          ------- ---
  -----------
    -------- ------------------
    -------
      - -----
          ----- ----------
          ------- ---
  -----------
    -------- ------------------
    -------
      - -----
          ----- ----------
          ------- ------

以上代码将创建四个 Lambda 函数 (createTodogetTodoupdateTododeleteTodo),每个函数对应一个 HTTP 方法 (POSTGETPUTDELETE)。这些 Lambda 函数将在 API Gateway 中注册并处理来自客户端的 HTTP 请求。

编写 Lambda 函数

现在,我们将编写 Lambda 函数来处理 HTTP 请求。在 handler.js 文件中添加以下内容:

-- -------------------- ---- -------
---- --------
----- --- - -------------------
----- -------- - --- ------------------------------
------------------------- - ------- -------- --------- -- -
  ----- ---- - -----------------------
  ----- ------ - -
    ---------- ---------------------------
    ----- -
      --- --------
      ----- ----------
      -------- ------
    --
  --
  -------------------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- ------ ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- ----------------------------
    --
    -------------- ----------
  ---
--
---------------------- - ------- -------- --------- -- -
  ----- -- - ------------------------
  ----- ------ - -
    ---------- ---------------------------
    ---- -
      --- ---
    --
  --
  -------------------- ------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- --- ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- ----------------------------
    --
    -------------- ----------
  ---
--
------------------------- - ------- -------- --------- -- -
  ----- -- - ------------------------
  ----- ---- - -----------------------
  ----- ------ - -
    ---------- ---------------------------
    ---- -
      --- ---
    --
    ----------------- ---- ---- - ------ ------- - ----------
    -------------------------- -
      -------- ----------
      ----------- -------------
    --
    ------------- ----------
  --
  ----------------------- ------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- ------ ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- ----------------------------------
    --
    -------------- ----------
  ---
--
------------------------- - ------- -------- --------- -- -
  ----- -- - ------------------------
  ----- ------ - -
    ---------- ---------------------------
    ---- -
      --- ---
    --
  --
  ----------------------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- ------ ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- -------------------
    --
    -------------- ----------
  ---
--

以上代码将创建四个 Lambda 函数 (createTodogetTodoupdateTododeleteTodo),函数将处理对应的 HTTP 方法 (POSTGETPUTDELETE)。在这个例子中,我们使用 DynamoDB 存储数据。当我们在客户端发送 POST 请求时,createTodo 函数将创建一个新的待办事项,并将其存储在 DynamoDB 中。当客户端发送 GET 请求时,getTodo 函数将获取指定的待办事项。当客户端发送 PUT 请求时,updateTodo 函数将更新指定的待办事项。当客户端发送 DELETE 请求时,deleteTodo 函数将删除指定的待办事项。

部署应用程序

最后,我们将使用 Serverless Framework 构建和部署应用程序。在终端中执行以下命令:

Serverless Framework 将构建并部署 Lambda 函数、API Gateway 和其他必要的部署资源。完成后,Serverless Framework 将输出一个 URL,本例中为:

您现在可以使用 Postman 或其他 HTTP 客户端来发送请求。例如,向 https://<api-id>.execute-api.<region>.amazonaws.com/dev/todos 发送 POST 请求来创建一个新的待办事项。发送 GET 请求到 https://<api-id>.execute-api.<region>.amazonaws.com/dev/todos/<id> 来获取指定的待办事项。

结论

本文介绍了如何使用 Serverless 架构来构建完整的 REST API。借助 Serverless Framework 和 AWS Lambda、API Gateway 和 DynamoDB,我们可以快速轻松地构建、测试和部署应用程序。此外,这篇文章也介绍了如何使用Node.js来编写Lambda函数,以及如何从客户端发送请求使用Lambda函数作为API处理程序。

示例代码

  • serverless.yml
-- -------------------- ---- -------
-------- -----------
---------
  ----- ---
  -------- ----------
----------
  -----------
    -------- ------------------
    -------
      - -----
          ----- -----
          ------- ----
  --------
    -------- ---------------
    -------
      - -----
          ----- ----------
          ------- ---
  -----------
    -------- ------------------
    -------
      - -----
          ----- ----------
          ------- ---
  -----------
    -------- ------------------
    -------
      - -----
          ----- ----------
          ------- ------
  • handler.js
-- -------------------- ---- -------
---- --------
----- --- - -------------------
----- -------- - --- ------------------------------

------------------------- - ------- -------- --------- -- -
  ----- ---- - -----------------------
  ----- ------ - -
    ---------- ---------------------------
    ----- -
      --- --------
      ----- ----------
      -------- ------
    --
  --
  -------------------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- ------ ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- ----------------------------
    --
    -------------- ----------
  ---
--

---------------------- - ------- -------- --------- -- -
  ----- -- - ------------------------
  ----- ------ - -
    ---------- ---------------------------
    ---- -
      --- ---
    --
  --
  -------------------- ------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- --- ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- ----------------------------
    --
    -------------- ----------
  ---
--

------------------------- - ------- -------- --------- -- -
  ----- -- - ------------------------
  ----- ---- - -----------------------
  ----- ------ - -
    ---------- ---------------------------
    ---- -
      --- ---
    --
    ----------------- ---- ---- - ------ ------- - ----------
    -------------------------- -
      -------- ----------
      ----------- -------------
    --
    ------------- ----------
  --
  ----------------------- ------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- ------ ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- ----------------------------------
    --
    -------------- ----------
  ---
--

------------------------- - ------- -------- --------- -- -
  ----- -- - ------------------------
  ----- ------ - -
    ---------- ---------------------------
    ---- -
      --- ---
    --
  --
  ----------------------- ------- -- -
    -- ------- -
      ---------------------
      ------------ ------------ --- ------ ---------
      -------
    -
    ----- -------- - -
      ----------- ----
      ----- -------------------
    --
    -------------- ----------
  ---
--

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6705f36ad91dce0dc8560cea

纠错
反馈