如何使用 Deno 来构建一个 Restful API 接口?

前言

Deno 是一个新的运行时环境和基于 V8 引擎的 TypeScript 运行时,它可以在浏览器和服务器端运行 JavaScript。Deno 具有许多优点,比如它没有 node_modules 文件夹、具有更高的安全性、支持 ES6+、TypeScript 和 WebAssembly 等等。其中一个最有趣的应用是使用 Deno 来构建 Restful API。

在本文中,我们将探索如何使用 Deno 构建一个 Restful API。我们将介绍什么是 Restful API,为什么使用 Deno 构建 Restful API,我们将使用什么工具来构建它,如何构建一个简单的 Restful API,并展示一些代码示例。

Restful API 是什么?

Restful API 是一种设计 Web 服务的架构风格,它遵循 Representational State Transfer(表征状态转移)原则,通常使用 HTTP 协议进行通信。Restful API 的核心思想是,将数据和操作视为资源,然后通过 HTTP 请求(get, post, put, delete 等)操作和传输这些资源。Restful API 侵入式地支持多种客户端,包括 Web、桌面和移动设备。

为什么使用 Deno 来构建 Restful API?

使用 Deno 来构建 Restful API 有许多好处。以下是其中的一些:

安全性

Deno 具有内置的安全性功能,例如只有在明确授权时才可以访问文件系统、网络、环境变量和其他敏感资源。此外,Deno 默认情况下不允许访问文件系统中的目录,因此您不必担心被恶意软件攻击。

TypeScript 支持

Deno 可以通过内置的 TypeScript 支持来增强开发工作流程。这意味着您可以使用 TypeScript 编写代码并获得类型检查、智能提示和许多其他好处。

无 Node.js 网络代码

Deno 的网络代码与 Node.js 的代码不同。这意味着你不需要安装 Node.js 来使用 Deno。此外,Deno 具有内置的 Fetch API,用于从 Web 获取数据。

原生 ES6+ 支持

Deno 支持 ES6+ 语言特性,而 Node.js 需要使用 babel 或其他编译器来支持这些特性。

科学上网

如果您在国内,可能会遇到许多科技障碍,例如无法访问 npm 包、GitHub、StackOverflow 等等。使用 Deno,您可以使用一些科学上网工具获得更好的开发体验。

使用 Deno 构建 Restful API 的工具

在 Deno 中,由于没有现成的框架,我们需要自定义一个 Restful API 的架构。可以使用以下工具:

Oak

Oak 是一个 Deno 的 Web 框架,它模仿了 Koa 框架并保持了其优雅和易于使用的特征。它类似于 Node.js 中的 Express 框架。Oak 简洁、易于使用,然而功能强大。

DenoDB

DenoDB 是基于 TypeScript 的 Deno 数据库连接器。它是一个轻量级的、简单的、易于使用的数据库连接器。DenoDB 提供了几种支持的数据库类型,例如 PostgreSQL、MySQL、SQLite3、MongoDB 和 CouchDB 等。

Dex

Dex 是一个非常精简的、轻量级的 SQL 生成器和查询构建器,在 Deno 中使用也非常之方便。

如何构建一个简单的 Restful API?

我们将构建一个简单的 Restful API,提供一个新的任务列表,可以创建、查看、更新、删除任务。我们将使用 Oak 和 DenoDB。

步骤1:安装依赖

我们需要安装以下依赖:

Oak

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

DenoDB

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

步骤2:创建数据库

我们将使用 SQLite3 作为数据库,因此我们需要下载 SQLite3。在终端使用以下命令下载 SQLite3:

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

创建一个新的文件夹,并在其中创建一个 tasks.db 文件。

步骤3:创建模型

我们需要创建一个模型,以便在我们的应用程序中使用它。

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

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

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

这个模型中有四个属相: idtitledescriptioncompletedid 是主键,自动递增。其他字段则是字符串或布尔值。

步骤4:创建控制器

我们需要创建控制器来响应 API 的请求。控制器负责与数据库进行交互,并将结果发送给客户端。

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

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

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

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

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

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

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

这个控制器中有五种不同的方法:indexcreateshowupdatedestroy。每个方法都接收一个 Context 对象,其中包含了请求和响应的数据。在这里,我们定义了一个与数据库交互的方法,并将结果发送给客户端。

步骤5:创建路由

我们需要创建路由来连接我们的 API 和控制器。

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

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

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

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

在路由中,我们为每个控制器方法创建一个 HTTP 请求方法和一个请求路径。

步骤6:启动服务器

我们需要启动服务器来监听来自客户端的请求,并将其发送到我们的路由、控制器和模型,以便返回正确的响应。我们将创建一个名为 server.ts 的文件夹。

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

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

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

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

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

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

我们使用 Application 类来创建我们的服务器,然后将其连接到我们的路由、控制器和模型。我们将使用端口 8000 。启动服务器时,我们会在终端中看到一行消息,表示服务器正常启动。

步骤7:测试 API

现在我们已经完成了 Restful API 的构建,在浏览器中打开 http://localhost:8000/tasks,我们将得到一个空的列表。

使用需要使用一些 API 客户端。以下是其中一些:

Insomnia

Insomnia 是一个流行的 API 客户端,可以轻松测试 Restful API。您可以从 https://insomnia.rest 下载 Insomnia。

HTTPie

HTTPie 是一个命令行 HTTP 客户端,提供很多有用的功能,例如语法高亮、JSON 着色、文件上传等等。您可以从 https://httpie.io 下载。

使用上述客户端中的任何一个客户端来测试 API 以确保其正常工作。我们可以测试每个端点是否能够创建、查看、更新和删除任务。

注意

在这个示例中,数据库和服务器运行在相同的主机和端口,所以在实际使用中可能需要更改配置。此外,这是一个非常简单的 API,不包含身份验证、授权和其他安全性措施,需要开发者自行添加。

结论

在本文中,我们介绍了如何使用 Deno 构建一个中等复杂度的 Restful API,为什么使用 Deno 构建 Restful API、使用了哪些工具来构建它、如何创建一个 Restful API,以及如何测试其中的每个端点。使用 Deno 构建 Restful API 意味着您可以利用 TypeScript 强大的类型检查、无需使用 Node.js 以及具有更高的安全性,因此我们可以选择 Deno 来构建 Restful API。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67134a34ad1e889fe20bd42f