在 Deno 上实现 REST API: oak 框架

阅读时长 7 分钟读完

随着 Deno 的发展,越来越多的开发者开始将注意力转移到 Deno 上,其可靠性和安全性使其成为前端工具包的优秀选择。在 Deno 上实现 REST API 是一个很好的示例,它提供了一个处理 HTTP 请求和响应的框架,而 Oak 框架就是其中的佼佼者。

什么是 Oak 框架?

Oak 是一个灵活的 Deno HTTP 中间件框架,其灵活性体现在其核心中间件的可扩展性,可自定义性和组合性。你可以使用它来构建各种类型的应用程序。

Oak 是中间件构建工具,因此你可以使用它来处理请求和响应。Oak 提供了许多有用的中间件,如路由,静态文件提供,浏览器版本检查和多语言支持。

安装 Oak

安装 Oak 可以使用 Deno 的内置包管理器命令:

快速安装后,你可以创建你的 Deno 项目并开始使用 Oak。

创建 REST API

我们将使用 Oak 来创建一个简单的 REST API,包含一些常见的 HTTP 方法如 GET、POST、PUT 和 DELETE。对于此教程,我们将编写一个 To-Do 应用程序,它具有以下功能:

  • 创建一个新的 To-Do 项目。
  • 获取所有的 To-Do 项目。
  • 获取单个 To-Do 项目。
  • 更新 To-Do 项目。
  • 删除 To-Do 项目。

创建服务器

我们将从创建服务器开始。我们将使用 Application 类创建服务器实例。

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

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

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

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

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

以上代码中,我们使用 Application 类创建服务器实例。这个实例使用我们传递的参数在起动服务器,如 await app.listen({ port: 8000 }); 表示我们要启动一个在端口 8000 的服务器。

创建路由

在路由文件夹中,我们将创建我们的路由。其中 router.ts 文件将包含对应我们 To-Do 应用程序的所有路由。

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

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

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

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

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

以上代码中,我们创建了一个新的路由器,并使用 .get() 方法引入两个路由。当用户访问 / 地址时,我们返回 “To-Do Home Page”,当用户访问 /todos 地址时,我们返回 “All To-Dos”。

导入路由

我们需要调用 app.use() 方法将路由导入到我们的应用程序中。我们将使用 Application 类的 router 中间件来完成这件事。

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

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

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

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

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

我们使用 app.use() 连接到所有路由器的路由和方法。这样我们就可以访问所有 //todos 路径。如果我们尝试访问的路径不在该路由中,我们会自动返回一个 404。

实现 POST 和 DELETE 方法

现在我们将添加 POST 和 DELETE 路由,当执行 POST 操作时将创建新的 To-Do 任务,并当执行 DELETE 操作时将删除完成的任务。

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

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

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

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

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

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

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

我们首先定义了一个接口类型,表示我们的 To-Do 任务结构,之后创建了一个 To-Do 任务数组列表。接下来我们将添加三个路由:

  • /todos/:id 路由用于获得单个 To-Do 任务。
  • /todos 路由用于添加一个新的 To-Do。
  • /todos/:id 路由用于删除一个 To-Do。

对于 POST 和 DELETE 方法,我们使用 request.body() 获取请求数据,使用 request.status 返回响应状态,使用 response.body 获取响应内容。

启动服务器

现在我们的服务都设置完成,我们可以运行起来!执行以下命令:

现在我们可以在浏览器中访问运行的应用,在表单控制台中可以看到数据所输出的结果。

总结

在本文中,我们使用 Oak 框架创建了一个 REST API 服务。我们创建了一个 To-Do 应用程序,包含了常见的 HTTP 方法(GET、POST、PUT 和 DELETE),以及对应的路由。这个 To-Do 应用程序示范了如何使用 Oak 在 Deno 上构建服务端应用程序。我们可以使用 Oak 在 Deno 上实现更多的服务端应用程序,希望本文对于大家有所帮助。

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

纠错
反馈