本文演示了如何使用 Express 和 JavaScript 创建一个基础 API。Express 是一个 NodeJS 极简主义 Web 框架。这种组合可以用最少的努力以光速启动并运行一个 API。如果您有六分钟的空闲时间,您可以让这个 API 工作起来做一些有用的事情。
开始使用 NodeJS
这个项目您需要您选择的 NodeJS 版本。在本例中,我使用 NodeJS 和 HTTPie 进行测试,一个 Web 浏览器和一个终端。一旦您准备好这些,您就可以开始了。让我们开始吧!
设置项目目录并安装工具以开始
$ mkdir test-api
npm init
命令为我们下面的项目创建 package JSON。输入 npm init
并多次按 Enter 键。输出如下所示
$ npm init
Press ^C at any time to quit.
package name: (test-api)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/cherrybomb/test-api/package.json:
{
"name": "test-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes)
此实用程序引导您创建 package.json
文件。它仅涵盖最常见的项目,并尝试猜测合理的默认值。有关这些字段的权威文档以及它们具体的作用,请参阅 npm help init
。
之后使用 npm install {pkg}
安装软件包并将其作为依赖项保存在 package.json
文件中。
接下来,使用 npm
CLI 安装 Express
$ npm install express
npm WARN cherrybomb No description
npm WARN cherrybomb No repository field.
npm WARN cherrybomb No license field.
+ express@4.18.1
added 60 packages from 39 contributors and audited 136 packages in 4.863s
16 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
最后,创建您的源目录和 index.js
文件,应用程序代码就放在这里
$ mkdir src
$ touch src/index.js
开始编码!
编写 API 代码
对于您的第一个编码操作,进行一个简单的“hello world”API 调用。在您的 index.js
文件中,添加以下代码片段
const express = require('express')
const app = express()
const port = 5000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
每个常量变量在以下作用域中都可用。因为您没有在代码中使用以下作用域,所以这些常量的使用无需过多考虑。
当您调用 app.get
时,您将 GET{rest article needed}
端点定义为正斜杠。这也设置了“hello world”响应。
最后,在最后一部分中,您将在端口 5000 上启动您的应用程序。终端上的输出在名为 console.log
的文件中显示您定义的消息。
要启动您的应用程序,请运行以下命令,并查看如下所示的输出
$ node ./src/index.js
Example app listening on port 5000
测试 API
现在一切都已启动并运行,进行一个简单的调用以确保您的 API 工作正常。对于第一个测试,只需打开一个浏览器窗口并导航到 localhost:5000
。

(Jessica Cherry, CC BY-SA 4.0)
接下来,看看 HTTPie 对 API 调用的说法
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 12
Content-Type: text/html; charset=utf-8
Date: Tue, 21 Jun 2022 14:31:06 GMT
ETag: W/"c-Lve95gjOVATpfV8EL5X4nxwjKHE"
Keep-Alive: timeout=5
X-Powered-By: Express
Hello World!
您看!一个完整的可工作的 API 调用。那么接下来呢?嗯,您可以尝试一些更改,使其更有趣。
让您的 API 更有趣
“hello world”部分现在已完成,所以现在是做一些酷炫数学的时候了。您将进行一些计数,而不是仅仅“hello world”。
将您的代码更改成这样
const express = require('express')
const app = express()
const port = 5000
let count = 0;
app.get('/api', (req, res) => {
res.json({count})
})
app.post('/api', (req, res) => {
++count;
res.json({count});
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
除了代码中的 GET
命令外,您现在还有一个 POST
来对您的计数进行一些更改。当计数定义为 0 时,LET
命令允许更改 COUNT
变量。
在 app.get
中,您获取计数,而在 app.post
中,您 ++count,它以 1 为增量向上计数。当您重新运行 GET
时,您会收到新数字。
尝试更改
test-api → node ./src/index.js
Example app listening on port 5000
接下来,使用 HTTPie 运行 GET
和 POST
操作进行测试,以确认其工作正常。从 GET
开始,您可以抓取计数
test-api → http GET 127.0.0.1:5000/api
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 11
Content-Type: application/json; charset=utf-8
Date: Tue, 21 Jun 2022 15:23:06 GMT
ETag: W/"b-ch7MNww9+xUYoTgutbGr6VU0GaU"
Keep-Alive: timeout=5
X-Powered-By: Express
{
"count": 0
}
然后执行几次 POST
,并观察更改
test-api → http POST 127.0.0.1:5000/api
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 11
Content-Type: application/json; charset=utf-8
Date: Tue, 21 Jun 2022 15:28:28 GMT
ETag: W/"b-qA97yBec1rrOyf2eVsYdWwFPOso"
Keep-Alive: timeout=5
X-Powered-By: Express
{
"count": 1
}
test-api → http POST 127.0.0.1:5000/api
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 11
Content-Type: application/json; charset=utf-8
Date: Tue, 21 Jun 2022 15:28:34 GMT
ETag: W/"b-hRuIfkAGnfwKvpTzajm4bAWdKxE"
Keep-Alive: timeout=5
X-Powered-By: Express
{
"count": 2
}
如您所见,计数增加了!再运行一次 GET
操作,看看输出是什么
test-api → http GET 127.0.0.1:5000/api
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 11
Content-Type: application/json; charset=utf-8
Date: Tue, 21 Jun 2022 15:29:41 GMT
ETag: W/"b-hRuIfkAGnfwKvpTzajm4bAWdKxE"
Keep-Alive: timeout=5
X-Powered-By: Express
{
"count": 2
}
结束与开始
我专注于基础设施和 Terraform,因此这是一种非常有趣的方式,可以用我以前从未使用过的语言快速学习和构建一些东西。JavaScript 发展迅速,看到似乎晦涩难懂的错误可能会很烦人。我可以看到一些个人意见对它作为一种语言的评价很苛刻,但它是一个强大而有用的工具。我希望您喜欢这次演练,并在过程中学到了一些新的和很酷的东西。
4 条评论