使用 Deno 构建 API 服务器
为什么选择 Deno?
当您开始构建 API 服务器时,您可以立即使用 Deno 提高工作效率
- 无需配置工具链、项目和 TypeScript,因为 Deno 附带 现代开发工具链 和 原生 TypeScript 支持
- 使用您熟悉的 Web 平台 API,例如
fetch()
、压缩流、BroadcastChannel
、Web 工作器、WebSocket
等 - 使用 Deno 的选择性许可系统 减轻供应链攻击
- 使用 Deno KV 在几行代码中添加状态,Deno KV 内置于运行时
Web 服务器
您可以使用一行代码创建一个服务器。不需要依赖项或依赖项清单文件。
Deno.serve((req) => new Response("Hello world"));
在我们的手册中了解有关 Deno.serve()
的更多信息。
以下是一个更长的示例,展示了如何检查 Request
对象 并使用 Response
对象 进行响应。
Deno.serve(async (req) => {
console.log("Method:", req.method);
const url = new URL(req.url);
console.log("Path:", url.pathname);
console.log("Query parameters:", url.searchParams);
console.log("Headers:", req.headers);
if (req.body) {
const body = await req.text();
console.log("Body:", body);
}
return new Response("Hello, world", {
status: 200,
headers: {
"content-type": "text/plain; charset=utf-8",
},
});
});
Node 如何?
请注意,在 Node.js 中,您无法使用 Web 标准 Request()
构造函数。相反,您必须导入 node:http
或第三方模块来创建 HTTP 请求。 了解 Node 如何偏离 Web 标准,从而导致构建时间过长、依赖项膨胀等问题。定义 API 路由
Oak 是一款受 Koa 启发的用于处理 HTTP 的中间件框架,可以轻松创建 HTTP 服务器的路由和路由处理程序。
import { Application, Router } from "https://deno.land/x/oak/mod.ts";
const books = new Map<string, any>();
books.set("1", {
id: "1",
title: "The Hound of the Baskervilles",
author: "Conan Doyle, Arthur",
});
const router = new Router();
router
.get("/", (context) => {
context.response.body = "Hello world!";
})
.get("/book", (context) => {
context.response.body = Array.from(books.values());
})
.get("/book/:id", (context) => {
if (books.has(context?.params?.id)) {
context.response.body = books.get(context.params.id);
}
});
const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
await app.listen({ port: 8000 });
由于 Deno 支持 npm,您还可以使用 Express、Koa、Fastify 和其他 npm 模块来构建 API 路由。
部署到生产环境
Deno Deploy 是我们的全球边缘无服务器平台,可让您在我们的网络中靠近用户的位置全球托管和运行您的服务器,提供高可用性和最小的网络延迟。
通过 连接 GitHub 帐户,在 Deno Deploy 上托管您的服务器非常简单且免费。
您还可以将 Deno 服务器托管在任何运行虚拟机或 VPS 的平台上,这些平台使用 Docker。以下是一些入门指南。
其他资源
有许多框架可以帮助您构建 HTTP 和 API 服务器
以下是一些使用 Deno 构建 HTTP 和 API 服务器的示例、博客文章和视频。