最近,Deno 和 Oak 成为了前端开发的热门话题。Deno 是一个基于 Rust 和 V8 引擎的新兴 JavaScript / TypeScript 运行时环境,Oak 则是基于 Deno 的服务器框架,设计灵感来自 Koa。
在本文中,我们将探讨如何使用 Deno 和 Oak 这两个工具来构建 RESTful API,并借助 TypeScript 的强类型特性和 Deno 的安全机制来提供更好的代码可读性和代码安全性以及容错性。
什么是 RESTful API
RESTful API 是基于 HTTP 协议,使用 CRUD 语义实现资源的创建、读取、更新和删除的一种网络 API 设计方式。它提供了一组通用的架构约束和超媒体链接,以便使用客户端与服务器之间共享功能。
RESTful API 的优点包括可伸缩、可扩展、易于缓存、分层等。
为什么选择 Deno 和 Oak
与 Node.js 相比,Deno 具有更好的安全性、更好的模块管理、更易于调试和更好的性能。并且,Deno 可以以更少的模块进行安全开发,这大大降低了代码维护的难度。
同时,Oak 是 Deno 上用于构建 Web 应用程序的 Koa 风格的 Web 框架,并具有 Koa 的许多知名优点,如易于定制、开箱即用、优雅等。
如何使用 Deno 和 Oak 构建 RESTful API
安装 Deno 和 Oak
首先,我们需要在本地机器上安装 Deno 和 Oak。你可以从 Deno 的官方网站(https://deno.land/)下载 Deno 的安装包,或者使用 Homebrew 安装 Deno:
brew install deno
然后,使用 Deno 自带的包管理器安装 Oak 模块:
deno install --allow-net --allow-env --allow-read --allow-write --unstable --import-map https://deno.land/x/oak/import_map.json oak
编写 RESTful API
我们将实现一个简单的用户管理 RESTful API,包括以下操作:
- 获取所有用户
- 获取指定用户
- 创建用户
- 更新用户
- 删除用户
在项目根目录下,新建一个名为 server.ts
的文件,输入以下代码:
-- -------------------- ---- ------- ------ - ------------ ------- - ---- ------ --------- ---- - --- ------- ----- ------- - --- ------ ------ - - - --- ---- ----- ------- -- - --- ---- ----- ----- -- - --- ---- ----- --------- -- -- ----- --- - --- -------------- ------------- ----- -------- ----- -- - ----- ------- ----- -- - -------------------------------------------- ---------------------------------- --------------------------- - -------- --- ------------- ----- -------- ----- -- - ----- ----- - ----------- ----- ------- ----- -- - ---------- - ------ ------------------------------------------- ----------- --- ------------- ----- -------- -- - ------ -------------------- - ---- ------ ----- ---- - ------------------------------------ -- ------------ --- - -- ------- --- -------- - ----------------- - ------ - ---- -- ------------ --- - -- ------- --- -------- - ----- ---- - -------------- -- ---- -- --------- -- ------ - ----------------- - ----- - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - ------ ---- ------- -- --------------------- - ----- ------ - ----- ------------------------- ----- ----- ---- - - --- ------------------- - --- ----- ----------- -- ----------------- ------------------- - ---- ----------------- - ----- - ---- - ------------------- - ---- - ------ ---- ------ -- --------------------- - ----- ------ - ----- ------------------------- ----- ---- - ------------------------------------ -- ------------ --- - -- ------- --- -------- - ----- --------- - ------------------- -- ---- -- --------- -- ---------- --- --- - --------------------- - ------------ ------------------- - ---- - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - ------ ---- --------- ----- ---- - ------------------------------------ -- ------------ --- - -- ------- --- -------- - ----- --------- - ------------------- -- ---- -- --------- -- ---------- --- --- - ----------------------- --- ------------------- - ---- - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - ------ -------- ------------------- - ---- --------------------------------- ----- ----- ---- --------- ------ - --- ------------------- ------- -- ------------------------ ----- ------------ ----- ---- ---
该代码中,我们定义了一个 User
接口,表示用户实体,同时我们初始化了一个 users
数据源,模拟了用户数据。然后我们通过 Application
类创建了一个 Oak 应用程序对象,并分别调用了三个中间件函数:responseTimeMiddleware
、loggerMiddleware
和 routerMiddleware
。其中 routerMiddleware
的核心代码如下:
-- -------------------- ---- ------- ------ -------------------- - ---- ------ -- --- ------ ---- ------- -- --- ------ ---- ------ -- --- ------ ---- --------- -- --- ------ -------- ------------------- - ---- --------------------------------- ----- ----- ---- --------- ------ -
该函数根据 HTTP 请求方法的不同路由到具体的请求处理逻辑。其中,GET
方法包括获取所有用户和获取指定用户两种情况,POST
方法用于创建用户,PUT
方法用于更新用户,DELETE
方法用于删除用户。当请求方法不满足上述四种情况时,我们将 HTTP 状态码设置为 405(Method Not Allowed),并设置 Allow 响应头,通知客户端可接受的请求方法。
运行 RESTful API
接下来,我们在终端中进入项目根目录,运行如下命令:
deno run --allow-net server.ts
该命令将在本地 8080 端口启动我们的服务。可以通过浏览器或者 HTTP 接口工具如 Postman 等方式进行测试。
使用 TypeScript
使用 TypeScript 可以大大提高代码的可读性以及类型安全性。我们在前文中提到的代码中添加 TypeScript 的支持十分简单,只需将文件名改为 server.ts
,然后在文件头部添加以下代码即可:
-- -------------------- ---- ------- -- --------- ------ - ------------ ------- - ---- ------ --------- ---- - --- ------- ----- ------- - --- ------ ------ - - - --- ---- ----- ------- -- - --- ---- ----- ----- -- - --- ---- ----- --------- -- -- ----- --- - --- -------------- ------------- ----- -------- ----- -- -- -------------- -- - ----- ------- ----- -- - -------------------------------------------- ---------------------------------- --------------------------- - -------- --- ------------- ----- -------- ----- -- -- -------------- -- - ----- ----- - ----------- ----- ------- ----- -- - ---------- - ------ ------------------------------------------- ----------- --- ------------- ----- -------- -- - ------ -------------------- - ---- ------ ----- ---- - ------------------------------------ -- ------------ --- - -- ------- --- -------- - ----------------- - ------ - ---- -- ------------ --- - -- ------- --- -------- - ----- ---- - -------------- -- ---- -- --------- -- ------ - ----------------- - ----- - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - ------ ---- ------- -- --------------------- - ----- ------ - ----- ------------------------ -- - ----- ------ -- ----- ----- ---- - - --- ------------------- - --- ----- ----------- -- ----------------- ------------------- - ---- ----------------- - ----- - ---- - ------------------- - ---- - ------ ---- ------ -- --------------------- - ----- ------ - ----- ------------------------ -- - ----- ------ -- ----- ---- - ------------------------------------ -- ------------ --- - -- ------- --- -------- - ----- --------- - ------------------- -- ---- -- --------- -- ---------- --- --- - --------------------- - ------------ ------------------- - ---- - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - ------ ---- --------- ----- ---- - ------------------------------------ -- ------------ --- - -- ------- --- -------- - ----- --------- - ------------------- -- ---- -- --------- -- ---------- --- --- - ----------------------- --- ------------------- - ---- - ---- - ------------------- - ---- - - ---- - ------------------- - ---- - ------ -------- ------------------- - ---- --------------------------------- ----- ----- ---- --------- ------ - --- ------------------- ------- -- ------------------------ ----- ------------ ----- ---- ---
与 JavaScript 代码相比,我们使用 as
关键字显式指定 result
的类型,提高了类型安全性,并统一了代码的风格。
总结
Deno 和 Oak 是现代化的技术栈,提供了更好的安全性、易用性、开发效率和性能表现。通过使用 TypeScript,我们可以降低代码维护的复杂度和提高代码的可读性和可维护性。希望本文能为读者提供帮助和启发,让大家在前端领域的学习和实践中能够更加高效和友好。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b0c7b968c7c53b0d69446