【问题标题】:GET request that triggers PATCH request (express) [closed]触发 PATCH 请求的 GET 请求(快速)[关闭]
【发布时间】:2020-01-07 05:09:44
【问题描述】:

在我的快递服务器上,我有一个通过抓取来检索项目的脚本。我想偶尔触发这个脚本并将检索到的项目推送到我的数据库中。

我的第一个想法是在我的 API 中创建一个端点(例如 /api/scrape-items)。问题是它将是一个 GET 请求,负责运行脚本、检索项目修补项目(更新)我的数据库。让 GET 请求完成所有这些似乎并不正确,尤其是发出 PATCH 请求,但我也无法将 GET 请求更改为 POST 请求,因为我没有正文。

有人可以帮我想出更好的方法吗?谢谢!

更新:触发端点示例:

router.get('/scrape-items/', async (req, res) => {
      try {
        const resultFromScraping = await [
          { id: 1, data: 'updated data' },
          { id: 2, data: 'updated data' }
        ]
        await Promise.all(
          resultFromScraping.map(
            async item =>
              await axios.patch(
                `/api/items/${item.id}`,
                item.data
              )
          )
        )
      } catch (err) {
        res.status(500).json({ message: err.message })
      }
    })

【问题讨论】:

  • 发布请求不需要正文
  • @NicholasSiegmundt 我实际上正在使用补丁,它只适用于帖子吗?您认为后端点检索外部内容并更新数据库是否可以?它也适用于补丁吗?
  • 补丁通常用于部分更新资源。 Post 对于获取信息并将其添加到数据库中是完全可以接受的。如果您将信息返回给用户,我会说 Get 甚至是可以接受的。
  • @MattiaRasulo 会做的
  • 为什么不重构你的代码,让请求逻辑和爬取逻辑分离,然后使用合适的cronjob来执行爬取部分?

标签: api express


【解决方案1】:

POST 请求对于将内容上传到数据库是完全可以接受的。 PATCH 通常是为您部分更新和项目时保留的。因此,如果您只是使用此请求更新数据库中的内容,请不要犹豫使用 PATCH。如果您要完全替换数据库中的资源(或者您需要 HTTP 请求中的整个资源,而不仅仅是修改后的内容),那么我建议您使用 PUT。

如果您要向用户返回数据,则在这种情况下也可以接受 GET 请求。

【讨论】:

  • 感谢您解决问题!
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 2020-07-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多