介绍
Deno 是一个新的 JavaScript 和 TypeScript 运行时环境,它是由 Node.js 的创始人 Ryan Dahl 创建的。与 Node.js 不同的是,它使用了 V8 引擎和 Rust 编写的 Libdeno,它比 Node.js 更加安全、轻便和现代化。
RESTful API 是一种通过 HTTP 协议来访问和操作数据的接口规范,它使用简单的 HTTP 方法和 URL 来实现客户端和服务端之间的数据传输和交互。本文将介绍如何使用 Deno 实现 RESTful API 并提供示例代码。
准备
在开始之前,我们需要安装 Deno 运行时环境,可以使用以下命令在终端中安装:
$ curl -fsSL https://deno.land/x/install/install.sh | sh
安装成功后,我们就可以开始实现 RESTful API。
实现
创建服务器
首先,我们需要创建一个简单的服务器并监听端口,可以使用以下代码:
-- -------------------- ---- ------- ------ - ----- - ---- -------------------------------------- ----- ------ - ------- ----- ---- -- ------------------- -- ------- -- ---- ------ --- ----- ------ --- -- ------- - ------------- ----- ------- ------ -- -
这段代码中,我们从 Deno 标准库中导入了 serve
函数用于创建服务器。我们创建了一个监听端口为 8000 的服务器,并在控制台上输出了运行信息。接着,我们使用 for await
循环来监听客户端请求,并使用 req.respond
函数来响应客户端请求。
处理路由
接下来,我们需要处理客户端请求的路由,即根据客户端请求的 URL 来执行相应的操作。我们可以将路由规则编写成一个对象,然后使用 JavaScript 的解构赋值来获取请求的 URL 和方法,可以使用以下代码:
-- -------------------- ---- ------- ---- ---------- - ----- - ------ - ----- - -------- ---- ----------- - ----- -------- -- --- ---- --------- - - ------ -------- - ------- -- ------------- ----------- - - ----- ------- --------- - - --------- - ---- ----- -- - -- ---- -- ----- ----- -- - -- ---- -- ---- ----- -- - -- ---- -- ------- ----- -- - -- ---- - - - ----- ----------- - ------- ---------- ------- ----------- ---- ------- -- - ----- - -------- - - --- -------- ------------------- ----- -------- - --------------- -- -- ------ ---------------- -- --- -- --- -
这段代码中,我们定义了 HttpMethod
和 HttpHandler
类型,并使用 HttpRoute
类型来定义所有路由规则。我们创建了一个名为 routes
的对象来定义路由规则,其中 /users
是路由路径,GET
、POST
、PUT
和 DELETE
是请求方法,而其值则是该方法的处理函数。
接着,我们定义了一个名为 findHandler
的函数来获取请求的 URL 和方法,并返回相应的处理函数。该函数首先使用 URL
构造函数来解析请求的 URL,然后获取其路径名 pathname
,使用该路径名从路由规则对象中获取相应的处理函数。
解析请求体
在处理 POST 和 PUT 请求时,客户端通常会在请求体中发送数据,我们需要解析请求体中的数据并将其转换为 JavaScript 对象。我们可以使用 BufReader
和 TextProtoReader
对象来读取请求体,并使用 JSON.parse
函数将请求体中的数据转换为 JavaScript 对象,可以使用以下代码:
-- -------------------- ---- ------- ----- ------ - --- ------------- ----- ------ - ----- ----- -------- -- - ----- ---- - ----- ---------------------- ----- ------- - ------------------- -- -------------------------------- -- ----------------------------------------------- - ------ ------------------- - ------ ------- -
这段代码中,我们使用 TextDecoder
对象将二进制数据转换为文本数据,并使用 JSON.parse
函数将文本数据转换为 JavaScript 对象。我们定义了一个名为 decode
的异步函数来异步获取请求体数据,并根据请求头中的 content-type
来判断请求体数据的类型。
响应客户端
最后,我们需要根据处理结果将结果返回给客户端。我们可以使用 req.respond
函数来响应客户端请求,并使用 JSON.stringify
函数将 JavaScript 对象转换为字符串返回给客户端,可以使用以下代码:
-- -------------------- ---- ------- ----- ------- - ----- ----- -------- ---- --------- -- - --- - ----- ---- - ----- ------------------- ---------- -- ----------- ------------- ---------- - --- -------- - -------------------- - ----- ------- - ---------- - --- -------- - ------------- - ------- - ---------------- - -
这段代码中,我们定义了一个名为 respond
的异步函数来处理客户端请求。我们在该函数中使用 try...catch...finally
语句捕获异常,如果在处理请求时出现了异常,则返回 500
状态码和错误消息,否则将处理结果转换为字符串并使用 req.respond
函数返回给客户端。
示例
使用上述代码,我们可以实现一个简单的 RESTful API 服务,以下是一个示例:
-- -------------------- ---- ------- ------ - ----- - ---- -------------------------------------- ---- ---------- - ----- - ------ - ----- - -------- ---- ----------- - ----- -------- -- --- ---- --------- - - ------ -------- - ------- -- ------------- ----------- - - ----- ------- --------- - - --------- - ---- ----- ----- -- - ------ - -------- ---- ------ - -- ----- ----- ----- -- - ----- ---- - ----- ----------- ------ - -------- ------- ---- ------------- - -- ---- ----- ----- -- - ----- ---- - ----- ----------- ------ - -------- ------- ---- ----------- - -- ------- ----- ----- -- - ------ - -------- ------- ------ - - - - ----- ------ - --- ------------- ----- ------ - ----- ----- -------- -- - ----- ---- - ----- ---------------------- ----- ------- - ------------------- -- -------------------------------- -- ----------------------------------------------- - ------ ------------------- - ------ ------- - ----- ----------- - ------- ---------- ------- ----------- ---- ------- -- - ----- - -------- - - --- -------- ------------------- ----- -------- - --------------- -- -- ------ ---------------- -- --- -- --- - ----- ------- - ----- ----- -------- ---- --------- -- - --- - ----- ---- - ----- ------------------- ---------- -- ----------- ------------- ---------- - --- -------- - -------------------- - ----- ------- - ---------- - --- -------- - ------------- - ------- - ---------------- - - ----- ------ - ------- ----- ---- -- ------------------- -- ------- -- ---- ------ --- ----- ------ --- -- ------- - ----- ------------ - -------- --- --------- --------------- ------------------ -- -- -
总结
本文介绍了如何使用 Deno 实现一个简单的 RESTful API。我们在实现过程中使用了 Deno 的标准库中的 HTTP 模块和 JavaScript 的新特性,实现了路由、请求体解析和响应客户端等功能。这些功能可以帮助我们在开发中更加快速地创建一些简单的 Web 服务。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66554c90d3423812e49d5b87