为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Postgres 的 Express REST API 的 HTTP 方法

使用 Postgres 的 Express REST API 的 HTTP 方法

MMTTMM 2023-08-24 21:09:29
我正在使用 Express 和 Postgres 实现 REST APIS。在端点中,我想首先通过 FK user_id 从表中删除所有实例,然后插入具有相同 user_id 的多个新实例。我想知道在这种情况下我应该使用哪种 http 方法?目前我使用 POST 但我不知道这是否合适。看来使用 PUT 也可以正常工作。router.post('/myTable', auth, async (req, res) => {  const client = await pool.connect();  try {    await client.query('BEGIN');    const { records } = req.body;    await client.query('DELETE FROM my_table WHERE user_id=$1', [req.user_id]);    for (i in records) {      await client.query('INSERT INTO my_table (name, user_id) VALUES ($1, $2)',[records[i], req.user_id]);    }    await client.query('COMMIT');    res.send();      } catch (error) {    console.log(error);    await client.query('ROLLBACK');  } finally {    client.release();  }});
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

PUT用于创建/替换您指定的 URI 处的资源。

因此,如果一个资源存在,它有一个客户端知道的 URI,并且通过请求PUT替换那里的内容,这PUT是最有意义的。

PUT相对于 POST的一大好处是PUT幂等性。

PUT因此,如果您向端点发送请求/myTable,则隐含的含义是您正在替换 ,并且同一端点上的myTable后续请求将为您提供与刚刚发送的内容在语义上相似的响应。GET

如果我的上述任何假设是错误的,您很可能会想要POST,这更像是一种通用的包罗万象的方法,可以在较少的限制下进行更改。POST缺点是,我认为在不检查/理解主体的情况下,给定请求的操作不太明显,并且您也会失去幂等性的好处。


查看完整回答
反对 回复 2023-08-24
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

目前我使用 POST 但我不知道这是否合适。

规则#1:如果您不确定,可以使用 POST。

POST 在 HTTP 中具有许多有用的用途,包括“此操作不值得标准化”的一般用途。


看来使用 PUT 也可以正常工作。

从某种意义上说,任何方法在源服务器上“都能正常工作”。HTTP 定义了请求语义——消息的含义。它不限制实施。

然而,通用客户端会假设您的服务器理解 GET/HEAD/POST/PUT 等,就像其他 Web 服务器理解它们一样。这是 REST 架构风格的强大功能的重要组成部分 - 任何符合标准的客户端都可以与任何符合标准的服务器进行通信,并且它可以正常工作。此外,如果我们在它们之间插入任何符合标准的缓存/代理,它会继续以完全相同的方式工作。

但是,如果您使用204 No Content响应PUT请求,那么通用组件将理解这与任何其他服务器返回的含义相同。也就是说,如果你偏离标准而导致财产损失,你的服务员要承担责任。


查看完整回答
反对 回复 2023-08-24
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您可以在这里查看答案以供参考。它们得到了很好的解释。 REST 中的 PUT 与 POST

但由于两者可以达到相同的目的,并且仅取决于您的偏好或要求,因此我通常使用 post 来创建资源并更新资源作为一种实践。


查看完整回答
反对 回复 2023-08-24
  • 3 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信