本文演示了如何使用 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
来对计数进行一些更改。将 count 定义为 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 条评论