如何使用 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
、等等。Organizer
Speaker
现在,我们可以将每个资源以路径的形式暴露到 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 哈希映射(或者更确切地说是一个对象)。我们可以使用Routes
Huncwot 的类型来进一步约束这一点。每个处理程序接收一个请求作为输入(具有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