api - 触发 PATCH 请求的 GET 请求(快递)
问题描述
在我的快递服务器上,我有一个通过抓取来检索项目的脚本。我想偶尔触发这个脚本并将检索到的项目推送到我的数据库中。
我的第一个想法是在我的 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 })
}
})
解决方案
POST 请求对于将内容上传到数据库是完全可以接受的。PATCH 通常保留用于部分更新和项目时。因此,如果您只是使用此请求更新数据库中的内容,请不要犹豫使用 PATCH。如果您要完全替换数据库中的资源(或者您需要 HTTP 请求中的整个资源,而不仅仅是修改后的内容),那么我建议您改用 PUT。
如果您将数据返回给用户,那么在这种情况下也可以接受 GET 请求。
推荐阅读
- java - How to improve performance of String.split?
- excel - Is it possible to make a number sequence based on a condition?
- serialization - Is a "local memory program" the same thing as a "serial program"?
- python - 去除面板数据中季节性的方法
- c++ - 如何搜索存储在 Boost::managed_shared_memory 段中的 Boost::interprocess::map 作为 open_read_only?
- java - 无法使用 Java 17 编译的 JRE 1.8_311 运行 JAR
- javascript - 如何从不是未决承诺的承诺中返回一个值:d3.js,Javascript?
- reactjs - 使用材质 UI 数据网格隐藏单击事件上的列的正确方法是什么
- .net - 为什么 .NET Framework 组件不适用于 .NET 6.0 表单
- android - 如何正确显示可编辑适配器的视图?