在 6 分钟内创建一个 JavaScript API

通过使用 Express(一个 NodeJS 极简主义 Web 框架)编写一个有趣的 API 来表达自己。
5 位读者喜欢这篇文章。
Woman sitting in front of her computer

Ray Smith

本文演示了如何使用 Express 和 JavaScript 创建一个基础 API。Express 是一个 NodeJS 极简主义 Web 框架。这种组合可以用最少的努力以光速启动并运行一个 API。如果您有六分钟的空闲时间,您可以让这个 API 工作起来做一些有用的事情。

开始使用 NodeJS

这个项目您需要您选择的 NodeJS 版本。在本例中,我使用 NodeJSHTTPie 进行测试,一个 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

Express API Hello World

(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 运行 GETPOST 操作进行测试,以确认其工作正常。从 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 发展迅速,看到似乎晦涩难懂的错误可能会很烦人。我可以看到一些个人意见对它作为一种语言的评价很苛刻,但它是一个强大而有用的工具。我希望您喜欢这次演练,并在过程中学到了一些新的和很酷的东西。

User profile image.
技术游民,从事我能找到的任何工作。IT 领域孤岛预防的倡导者,所有团队之间信息共享的重要性。相信教育所有人并进行开源开发。热爱所有技术事物。对 K8s、混沌以及我能找到的任何新的和闪亮的东西都感兴趣!Mastodon ID

4 条评论

构建 API 的出色介绍,以及一些很好的工具。

非常感谢!

(只是一个小小的更正:命令 "$ test-api → node ./src/index.js" 中没有点)

`node ./src/index.js` 中的点是文件路径的一部分。虽然它不是必需的,但它是一种常见且安全的方式,以确保您正在运行您认为正在运行的文件。如果您输入 ./src/index.js 并且您收到错误,提示没有这样的目录,那么您就知道您不在您认为自己在终端中的位置。

回复 作者 gcoen

在讨论报告文章示例之前,请注意。叙事文章是一种围绕单一主题或中心点展开整个叙事的文章。使用此链接 此外,在本文中,所有事件、事件和角色都围绕故事中的单一主题展开。

只是提醒一下 - Monterey 上的 ControlCe(据报道专门用于 AirPlay)进程使用端口 5000。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.