【问题标题】:Which method is prefer when building API构建 API 时首选哪种方法
【发布时间】:2017-12-17 19:39:24
【问题描述】:

我正在使用 express 框架构建 API,但目前我需要选择请求/响应方法

有一种使用 JSON 的方法,因此有人可以发送带有 JSON 数据的 post 请求,但这种方式不能通过 HTML 表单发出请求

但是如果我使用可以通过 HTML 表单请求的方法,其他开发人员可以使用此 API 来构建自己的应用程序或客户端

所以我的问题是在构建 API 时哪种方法更好,是接受 JSON 请求还是接受普通请求,如果我的 API 是为其他开发人员制作的,哪种方法更好?

【问题讨论】:

  • 最好遵守发帖规则:stackoverflow.com/help/on-topic
  • 这完全取决于什么最适合您的目标开发人员受众,只有您自己知道。如果您的受众想要直接从 HTML 表单发布而没有干预 Javascript,那么您需要支持这种类型的传入数据。如果您的开发人员只是从 Javascript 发出请求,那么 JSON 可能是一种更自然的传入数据数据格式。您选择最适合您的观众的。我们对您的目标开发人员和/或他们正在尝试做什么一无所知。

标签: node.js api express


【解决方案1】:

先给你一些背景知识,然后我会进行具体的回答。

您正在使用 Express 来解析请求正文,您将使用正文解析器。见:

也许最好看一些示例,您可以通过使用 JSON 和来自 HTML 表单格式的数据发送请求来测试这些示例。

使用表单编码的示例请求:

curl -X POST localhost:4443 \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'a=X&b=Y'

(这是一个可以放在一行中的单个命令,无需反斜杠)

使用 JSON 编码的示例请求:

curl -X POST localhost:4443 \
  -H 'Content-type: application/json' \
  -d '{"a":"X","b":"Y"}'

(这也是一个单一的命令——为了便于阅读,放在多行上)

现在,可以响应这些请求的服务器代码:

这是一个接受 JSON 的服务器:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());

app.post('/', (req, res) => {
  console.log(req.body);
  res.json({ ok: true });
});

app.listen(4443, () => console.log('Listening on http://localhost:4443/'));

这是一个接受表单数据的服务器:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.urlencoded({ extended: true }));

app.post('/', (req, res) => {
  console.log(req.body);
  res.json({ ok: true });
});

app.listen(4443, () => console.log('Listening on http://localhost:4443/'));

这是一个接受两者的服务器:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/', (req, res) => {
  console.log(req.body);
  res.json({ ok: true });
});

app.listen(4443, () => console.log('Listening on http://localhost:4443/'));

如您所见,支持这两种样式很简单,您不必只选择其中一种。

现在,针对您的具体问题:

所以我的问题是在构建 API 时哪种方法更好,是接受 JSON 请求还是接受普通请求,如果我的 API 是为其他开发人员制作的,哪种方法更好?

作为一名开发人员,我个人更喜欢使用 JSON,但如果需要,我可以理解使用表单编码的必要性。使用 Express 可以很容易地同时支持两者,因此您不必只选择一个。

但是,如果您出于某种原因只想选择一个,请与您的开发人员交谈。这些是您的 API 的消费者,因此他们是唯一可以告诉您什么是“更好”的人。

【讨论】:

  • 那会不会是有人同时发送表单数据和JSON请求的情况?
  • @AndrewYoung 在任何给定的请求中,只能有表单数据或 JSON,因为请求只能有一种内容类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2021-12-10
相关资源
最近更新 更多