跳到主要内容
Deno 2.4 已发布,带来 deno bundle、bytes/text 导入、稳定的 OTel 等功能
了解更多

使用 Deno 构建 API 服务器


为什么选择 Deno?

使用 Deno 构建 API 服务器时,您可以立即提高工作效率

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.js 呢?
请注意,在 Node.js 中,您无法使用 Web 标准的 `Request()` 构造函数。相反,您必须导入 `node:http` 或第三方模块来创建 HTTP 请求。了解 Node.js 脱离 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 上托管您的服务器既简单又免费。

了解为什么边缘是 Web 的未来.

您也可以将 Deno 服务器托管在任何运行带有 Docker 的 VM 或 VPS 的平台上。以下是一些帮助您入门的指南。

额外资源

有许多框架可以帮助您构建 HTTP 和 API 服务器

以下是一些关于使用 Deno 构建 HTTP 和 API 服务器的示例、博客文章和视频。