如何使用 TypeScript 在 Node.js 中快速构建 REST API(适合初学者)- 第 1 部分(共 4 部分)

2025-06-10

如何使用 TypeScript 在 Node.js 中快速构建 REST API(适合初学者)- 第 1 部分(共 4 部分)

让我们使用TypeScript在 Node.js 中构建一个简单的 REST API 。由于内容丰富,本系列将分为四个部分。它也面向完全的初学者或刚开始学习编程的人。同时,我将提到一些高级主题,以便即使您知道如何构建 REST API,也希望您能从本教程中有所收获。

如果您更喜欢观看我编写此应用程序的代码而不是阅读文章,请观看此视频:

此外,如果您喜欢它,请考虑订阅我的 YouTube 频道以获取更多信息。


在本系列中,我将使用Huncwot,这是一个快速构建 Web 应用程序的工具。它是一个涵盖前端、后端以及两者之间所有内容的集成解决方案。

我们先来安装Huncwot吧。最好全局安装。

npm install -g huncwot

一些理论

在开始代码之前,我们先来了解一些理论知识。这不会是一篇详尽的介绍。我的目标是解释一些概念,然后展示一些实际的例子。我相信这是快速掌握相关知识的最佳方法。

蜜蜂

API 代表应用程序接口 (Application Program Interface)。这里重点是“接口”这个词。接口是我们与设备交互的起点。例如,我们手机的屏幕就是一个接口,确切地说是用户界面 (UI)。这个接口让我们能够与设备交互。通过触摸、按压和滑动屏幕,我们可以指示手机执行某些操作。这些手势是折衷方案:对于人类来说,只需思考要执行的操作就更容易;对于手机来说,直接以 0 和 1 的顺序接收指令更容易;因此,我们需要一个折衷方案,即介于人类与手机交互方式之间的一个点——接口。

Web API

API 有很多种类型。在本教程中,我们将讨论 Web API,它是网络上我们通过获取或发送数据来与某些对象进行交互的地方。换句话说,Web API 是通过端点(URL)公开的接口,它允许我们通过交换消息与某些系统进行交互。这些消息是我们发送的请求和收到的响应。Web API 是一个消息系统,从概念上讲,它在某种程度上类似于面向对象编程。

网址

请求指示 Web API 为我们执行某些操作。为了发送请求,我们需要一个地址:URL。URL 由几个部分组成。首先是协议:对于 Web API 来说,协议是http(s)。其次是域名,它指定了 Web API 在网络上的某个位置。最后是路径,它是该域名内描述特定信息子集的位置。

资源

假设我们要构建一个用于技术活动的 Web API,以便查询我们地区即将举行的活动,或者过去举办的最佳技术会议。我们首先要为该上下文中的所有实体创建必要的抽象。这些抽象称为资源。我们可以从一种Event资源开始,每个资源都包含一个name字段和一个字段。之后,我们可以设想添加其他资源date例如Attendee等等。OrganizerSpeaker

现在,我们可以将每个资源以路径的形式暴露到 Web API 的 URL 中,例如,资源/event的路径Event、资源/speaker的路径Speaker等等。资源暴露后,我们就可以通过发送请求和接收响应来与其进行交互。例如,我们可以获取特定资源的当前状态,根据特定条件过滤资源,或者因为名称拼写错误而更新资源。

标题

在向 Web API 发送请求和接收响应时,我们可能需要参数化此 API 的行为。这与 API 的具体上下文无关,无论我们构建的是用于技术事件、管理书店还是安排预约的 API。例如,我们可能想要更改响应格式。我们会通过标头将这一情况告知 API。

处理程序

每条路径都与一个函数关联,该函数描述了访问此路径或请求此资源时应该发生的情况。我们将这些函数称为处理程序。处理程序接收请求作为输入,并产生响应作为输出。

路线

Web API 是路径(可能描述资源)和处理程序之间的映射。路径及其处理程序的特定组合称为路由。这是一种数据驱动的定义路由的方法。我们使用大多数编程语言中已有的简单数据结构——映射,来表示公开路径与访问该路径时触发的函数之间的关系。

实例

让我们最终跳到代码并创建我们的项目:techevents

huncwot new techevents

让我们在 VS Code 中打开该项目。我们只对文件感兴趣config/server/routes.ts

import { Routes } from 'huncwot';
import { OK } from 'huncwot/response';

const routes: Routes = {
  GET: {
    // implicit `return` with a `text/plain` response
    '/hello': _ => 'Hello Huncwot',

    // explicit `return` with a 200 response of `application/json` type
    '/json': _ => {
      return OK({ a: 1, b: 2 });
    },

    // set your own headers
    '/headers': _ => {
      return { body: 'Hello B', statusCode: 201, headers: { 'Authorization': 'PASS' } };
    }
  },
  POST: {
    // request body is parsed in `params` by default
    '/bim': request => {
      return `Hello POST! ${request.params.name}`;
    }
  }
};

export default routes;

Huncwot 为我们生成了路线的基本结构。让我们启动服务器来测试一下:

huncwot server

此命令将在端口 上启动服务器:5544。现在我们可以发送一些请求来查看它是如何工作的。我将使用 HTTPie 直接从命令行发送请求,但您也可以使用类似Postman API 客户端 的工具。

让我们向该/hello路径发送一个请求:

http :5544/hello
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 13
Content-Type: text/plain
Date: Sun, 29 Dec 2019 16:56:23 GMT

Hello Huncwot

由于服务器正在运行,localhost我可以跳过该部分并仅指定端口和路径。

http :5544/json
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 13
Content-Type: application/json
Date: Sun, 29 Dec 2019 16:56:44 GMT

{
    "a": 1,
    "b": 2
}

Huncwot 能够自动将 JavaScript 对象转换为 JSON。此外,您还可以使用诸如 Response Helpers 之类的工具OK来指定您选择的 HTTP 状态代码。

http :5544/headers
HTTP/1.1 201 Created
Authorization: PASS
Connection: keep-alive
Content-Length: 7
Content-Type: text/plain
Date: Sun, 29 Dec 2019 16:57:11 GMT

Hello B

由于 Huncwot 中的响应只是对象,因此您可以将headers字段添加到响应对象中,并根据需要添加标头。在本例中,Authorization标头的值为PASS

在 Huncwot 中,您的路线更改会自动重新加载。无需重启服务器,也无需安装类似的东西nodemon。它开箱即用。您无需为此担心。

config/server/routes.ts是一个简单的 JavaScript 哈希映射(或者更确切地说是一个对象)。我们可以使用RoutesHuncwot 的类型来进一步约束这一点。每个处理程序接收一个请求作为输入(具有Request类型),并返回一个响应(具有Response类型)。


现在,我们已经很好地理解了一些与 Web API 相关的概念。我们为未来的 REST API 奠定了基础。但由于一些重要元素尚未实现,我们仍需努力。我将在接下来的文章中介绍这些内容。敬请期待!

鏂囩珷鏉ユ簮锛�https://dev.to/zaiste/how-to-quickly-build-a-rest-api-in-node-js-with-typescript-for-absolute-beginners-part-1-of-4-21de
PREV
我正在直播如何使用 REST 和 GraphQL 在 Flutter 中为 Dev.to 构建移动应用程序
NEXT
使用 Node.js、Vue.js 3 和 PostgreSQL 的全栈 TypeScript - 简介