【问题标题】:How to merge multiple API calls into one call in REST API如何在 REST API 中将多个 API 调用合并为一个调用
【发布时间】:2021-10-30 03:56:21
【问题描述】:

例如,如果我有一个 API 调用 http://localhost:3006/send-message?email=abc@mysite.com&password=xxxxxx&count=4&location=US 和另一个 API 调用 http://localhost:3006/cancel-request?email=abc@mysite.com&password=xxxxxx&count=2&usernames=abc,xyz。 那么,我可以通过执行http://localhost:3006/send-message?email=abc@mysite.com&password=xxxxxx&count=4&location=US/cancel-request?count=2&usernames=abc,xyz 之类的操作将这两个调用合并为一个吗?如果是,那么我如何在 Node.js 中使用 express 处理这个问题。

【问题讨论】:

  • 我想问的问题是:为什么。为什么不打 2 个电话?
  • @Evert - 几个可能的原因。 1) 减少单独 API 调用的数量可以提高服务器或客户端的性能。 2)这两个操作可能是相关的,当一个服务器端代码控制这两个操作时,一个错误时的错误处理可以更好地管理。
  • @jfriend00,我知道有人可能想要这样做的原因是存在的,但我明确要求 OP 更好地回答他们的问题。
  • 如果这确实是你的理由 #1,我建议首先确保它确实需要。将 2 次调用减少到 1 次可能不会产生任何影响,并且会增加很多复杂性。我可能也不建议构建通用的“批量操作”API,而是尝试设计以目标为中心的 API
  • @Evert 首先,它不仅仅是 2 个调用,实际上它是连续 8 个不同的调用。而且,它执行一些自动化任务。如果我们分别调用它们,则每次遇到验证码时都必须启动会话。因此,通过合并这些调用,我可以在一个会话中执行所有这些操作。

标签: node.js api rest express http


【解决方案1】:

我建议将这些操作设为 POST 而不是 GET。然后,您可以有一个多操作的 URL,并且您可以在正文中包含一个 JSON 有效负载,其中包含一组操作及其参数:

http://localhost:3006/multi-operation

使用解析为以下内容的 JSON 有效负载:

[
   {
       operation: "send-message",
       email: "abc@mysite.com",
       password: "xxxxx",
       count: 4,
       location: "US"
   },
   {
       operation: "cancel-request",
       email: "abc@mysite.com",
       password: "xxxxx",
       count: 2,
       usernames: ["abc","xyz"]
   }
]

这也只会在请求正文中发送敏感信息,例如密码,这通常被认为比将它们放在 URL 中更安全(它们可能会被各种基础设施记录)。

注意:在 REST API 设计中,GET 请求不应该有“副作用”。它应该检索一些资源。调用它 0 次、1 次或 10 次应该对服务器/世界产生相同的效果。因此,与在一个 API 调用中指定多个操作的愿望无关,这些操作都不应该是 GET 操作,因为它们都有副作用(它们会导致发生一些变化)。因此,这些应该是 POST 操作。有很多关于何时在 REST API 中使用 GET、POST、PUT、PATCH 等的好文章。如果您对此感到困惑,可以从这些文章开始或通过搜索找到许多其他文章:

https://restfulapi.net/http-methods/

https://www.restapitutorial.com/lessons/httpmethods.html

【讨论】:

  • 是的,我点击了。
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多