如何使用 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


猜你喜欢

  • 在项目中如何使用 ESLint-Plugin-React 规范 React 代码风格

    介绍 ESLint 是一个可插拔的 JavaScript 语法检查工具,可以使用各种规则来定义代码的规范,从而避免一些常见的错误和代码风格不一致。针对 React 项目,ESLint-Plugin-R...

    5 天前
  • 如何使用 Custom Elements 和 Shadow DOM 实现自定义控件

    简介 自定义控件是现代前端开发不可或缺的一部分。在过去,我们可能需要在开发过程中使用第三方库或框架才能实现自定义控件的需求。但是,现在有了 Custom Elements 和 Shadow DOM,我...

    5 天前
  • 如何借助 Workbox2 轻松实现 PWA

    随着Web技术的发展,Web应用程序的重要性越来越突出。作为Web开发者,我们需要知道如何创建一个可靠,可用并且具有出色体验的Web应用程序。Progressive Web App(PWA)是一个广受...

    5 天前
  • ES10 中 Promise.all() 方法的错误处理最佳实践

    在 JavaScript 中,Promise.all() 方法可以同时运行多个 Promise 实例,并返回所有 Promise 实例的结果。ES10 中,Promise.all() 方法提供了一些有...

    5 天前
  • 如何使用 Fastify 框架的插件

    作为一个开源,低开销,快速的 Node.js Web 框架,Fastify 已经流行和广泛使用。它具有出色的性能、可扩展性和清晰且优雅的代码结构。 Fastify 有一个强大的插件系统,可以使开发更简...

    5 天前
  • Kubernetes 入门教程:从 hello world 到 Deployment 部署

    什么是 Kubernetes? Kubernetes 是一种开源容器编排平台,可以帮助开发人员在生产环境中自动化部署,管理和扩展容器化应用程序。它是 Google 的 Borg 系统的开源版本,旨在帮...

    5 天前
  • Promise 和回调函数的对比及优缺点

    前端开发中,经常需要处理异步操作,例如读取文件、发送请求或者处理定时器等。在处理异步操作时,有两种常用的方式:回调函数和 Promise。本文将对它们进行详细的对比,并分析它们的优缺点。

    5 天前
  • Docker下的Nginx如何开启Http2.0?

    引言 Http2.0是目前较新的一种Web协议,它能够在请求和响应之间打开多个流通道,从而提高网页加载速度,提高用户体验。而Nginx是一种广泛使用的Web服务器,它也支持Http2.0。

    5 天前
  • 如何在 Express.js 中实现 Caching

    在使用 Express.js 开发 Web 应用程序时,提高应用程序的性能是至关重要的。本文将介绍如何使用缓存技术来提高 Express.js 应用程序的性能。 什么是 Caching? Cachin...

    5 天前
  • Mocha 测试框架中如何判断测试用例的相等性

    在进行前端开发过程中,我们经常需要对代码进行测试,以确保它们能够正常地工作。而 Mocha 是一种流行的 JavaScript 测试框架,它提供了包括用例编写、测试运行、报告生成和自动化测试等丰富的功...

    5 天前
  • 如何使用 CSS Flexbox 实现自适应高度的元素布局

    随着Web应用的发展,前端技术也日益精进。在网页设计中,自适应布局已经成为了一个不可忽略的潮流。CSS Flexbox 可以帮助我们轻松实现各种元素布局。接下来,本文将详细讲述如何使用 CSS Fle...

    5 天前
  • 解析 GraphQL 的 Schema 第四步:Mutations

    在前面的几篇文章中,我们已经介绍了 GraphQL 的基本概念、Schema 和 Queries。在这篇文章中,我们将会讨论 GraphQL 的第四个重要概念:Mutations。

    5 天前
  • Headless CMS 系统中的防止 XSS 攻击解决方案

    什么是 Headless CMS? Headless CMS 是一种 CMS(内容管理系统)架构型态, 它是把后端管理系统和前端显示系统分别独立开发、部署的一种模式。

    5 天前
  • 如何使用 Deno 结合 Redis 进行缓存处理

    简介 Deno 是一个新兴的运行时环境,具有安全性好、易于安装和管理等优点。而 Redis 是一种高性能的内存数据库,并且具有良好的缓存处理能力。将 Deno 和 Redis 结合使用,可以使得前端应...

    5 天前
  • SASS 中的条件判断规则使用实践

    在前端开发中,CSS 是一个必不可少的技术。为了更好的管理和维护 CSS,CSS 预处理器如 SASS 日益普及,其中,条件判断是 SASS 的一个非常强大的功能。

    5 天前
  • 在 React 中使用 TypeScript 的局限及解决方法

    在 React 中使用 TypeScript 的局限及解决方法 在 React 中使用 TypeScript 已经成为了大多数前端开发人员的选择,因为 TypeScript 可以在代码编写时就检查出类...

    5 天前
  • Redis 在分布式缓存中的应用场景分析

    Redis 是一个广泛应用的分布式内存缓存系统,它的出色性能和可靠性使它成为了解决高并发、大数据量、高并发场景下的首选。在分布式缓存中,Redis 除了作为普通的缓存使用,还可以应用于一些特殊场景,本...

    5 天前
  • Android Material Design 中使用圆角图片时的适配问题解决方案

    随着 Material Design 的流行,用户界面变得更加美观且直观。其中一个设计元素是使用圆角图片来增强视觉效果。然而,在 Android 应用程序中使用圆角图片时,可能会遇到适配问题,如变形、...

    5 天前
  • 解决 LESS 字体显示问题

    在开发网页时,我们经常会使用 LESS 来帮助我们编写 CSS 风格的代码。然而,在使用 LESS 时,你可能会遇到字体显示问题,导致你的网页无法正常加载字体。本文将介绍如何解决这个问题,并提供示例代...

    5 天前
  • 在 Socket.io 应用中如何启用 WebSocket 大负载支持

    在现代 Web 应用程序中,实时通信已经成为了一种必不可少的需求。Socket.io 是一个流行的实时通信引擎,基于 WebSocket、AJAX 长轮询以及其他传输方式,为 Web 应用程序提供了一...

    5 天前

相关推荐

    暂无文章