本文将指导您使用 Deno、Oak 框架和 DenoKV 数据库创建 REST API。
我们将构建一个简单的图书 API 来完成所有这一切。但首先,让我们了解这些技术。
Deno 旨在简化 Javascript。
它通过解决开发人员在使用 Node.js 时面临的许多问题来实现这一点。 Deno 简单的方法可以帮助开发人员编写更安全、高效、现代的 JavaScript 代码。
Deno 的一个巨大卖点是它的安全性。默认情况下,除非开发人员明确允许,否则它不允许访问文件系统、网络或环境变量。 Deno 还为开发人员提供原生 TypeScript 支持,无需额外配置。
Deno 附带的其他功能有:
Oak 是 Deno 的中间件框架,可帮助开发人员构建 Web 应用程序和 API。
它提供了处理 HTTP 请求、管理路由和集成中间件的工具,类似于 Node.js 中的 Express。 Oak 还具有开箱即用的 TypeScript,并受益于 Deno 的安全性和现代运行时环境。这为开发人员提供了熟悉的语法,同时仍然享受更多现代功能。
Oak 允许开发者在安全、高效、渐进的环境中采用 TypeScript 优先的实践。
DenoKV 是一个管理 Deno 结构化数据的键值数据库。
每条数据或“值”都有一个唯一的标识符或“键”,可以通过引用其键轻松获取数据。这种方法允许开发人员管理数据而无需设置单独的数据库服务器。 DenoKV 非常适合轻量级应用和快速原型设计。
开发人员可以获得一个简单的解决方案,可以在代码旁边管理数据。
curl -fsSL https://deno.land/install.sh | sh
对于 macOS:使用 Shell
irm https://deno.land/install.ps1 | iex
对于 Windows:使用 PowerShell
curl -fsSL https://deno.land/install.sh | sh
对于 Linux:使用 Shell
要测试您的安装,请运行 deno -version。
运行命令 deno init deno-oak-demo 创建一个名为 deno-oak-demo 的新项目,然后 cd 进入它
接下来,您需要在 deno-oak-demo 目录中创建 4 个新文件:
您的 eno-oak-demo 目录现在应该如下所示
接下来,您需要安装 Deno 的官方 VSCode 扩展,该扩展添加了对将 Deno 与 Visual Studio Code 结合使用的支持。
使用命令 deno add jsr:@oak/oak 将 Oak 框架安装为依赖项。
您的 deno.json 文件现在应该如下所示
每次我们在 Deno 中安装一个包时,它都会作为导入被放置在 deno.json 文件中。然后,如果我们想将此包导入到文件中,我们可以使用 deno.json 中定义的别名或直接引用包的 URL。
在 book.types.ts 文件中添加以下代码
curl -fsSL https://deno.land/install.sh | sh
并在 book.dto.ts 文件中添加此
irm https://deno.land/install.ps1 | iex
将以下代码添加到validation.ts
curl -fsSL https://deno.land/install.sh | sh
首先,我们将 Oak Router、Book 接口、createBookSchema 和 updateBookSchema 导入到 book.routes.ts 文件中:
export interface Book { id: string; title: string; author: string; description: string; }
接下来,我们将初始化 DenoKV 数据库并创建一个新的路由器实例来处理 HTTP 路由。
export interface CreateBookDTO { title: string; author: string; description: string; }
接下来,我们将创建一个辅助函数来通过 id 获取一本书:
import { z } from "https://deno.land/x/zod@v3.17.0/mod.ts"; export const createBookSchema = z.object({ title: z.string(), author: z.string(), description: z.string(), }); export const updateBookSchema = z.object({ title: z.string().optional(), author: z.string().optional(), description: z.string().optional(), });
kv.get 接受一个包含两个字符串的数组:一个表示名称空间“books”,另一个表示正在检索的特定书籍的键。
接下来,让我们定义路由处理程序以通过 id 获取单本书:
import { Router } from "@oak/oak/router"; import type { Book } from "./book.types.ts"; import { createBookSchema, updateBookSchema } from "./validation.ts";
与 Express 不同,在 Oak 中,请求和响应都是从上下文对象访问的,上下文对象同时具有请求数据和响应方法,从而提供了处理 HTTP 交互的简化方法。
接下来,添加路由处理程序以获取所有书籍:
const kv = await Deno.openKv(); const bookRouter = new Router;
Kv.list 检索共享公共前缀(命名空间)的所有键值对。
接下来,添加路由处理程序以创建新书:
async function getBookById(id: string) { const entry = await kv.get(["books", id]); return entry.value as Book | null; }
Kv.set 可用于在数据库中保存新的键值对,在本例中,它需要一个数组(包含两个字符串;命名空间和键)和要保存的值。
接下来,添加路由处理程序以按 id 更新书籍:
curl -fsSL https://deno.land/install.sh | sh
kv.set 还可以用于更新键值对的值。在这种情况下,它需要一个数组(带有两个字符串;命名空间和将更新其值的键)和要更新的新值。
最后,让我们添加路由处理程序以按 id 删除书籍:
irm https://deno.land/install.ps1 | iex
kv.delete 删除给定的键值对。
在main.ts文件中添加以下代码:
curl -fsSL https://deno.land/install.sh | sh
我们需要对 deno.json 进行一些小更改才能运行我们的应用程序。
export interface Book { id: string; title: string; author: string; description: string; }
我们添加了 --stable-kv 标志,因为 DenoKV 仍然是一个不稳定的 API。
此外,我们还添加了 --allow-net 标志来授予 Deno 网络访问权限。
完成此操作后,我们可以通过运行 deno run dev 来启动我们的应用程序。
文章已经结束了。
现在您可以使用 Deno Oak 和 DenoKV 数据库创建 REST API。
以上是使用 Deno 和 Oak 框架构建 REST API 的指南的详细内容。更多信息请关注PHP中文网其他相关文章!