api - 将多个 REST API 请求合并为一个请求?

标签 api rest latency

我正在为我的应用程序开发 REST API。

使用此 API,我可以使用 PUT companies/1 执行诸如更新公司或个人详细信息之类的操作。和 PUT persons/2 , families/3等。

我想使用这个 API 从其他应用程序进行定期同步。这将涉及对 REST API 的数十万个请求,其中大部分是此类更新。每个请求只需要很少的时间,但每个单独请求的延迟加起来相当长。

有什么方法可以创建可以将多个请求组合为一次的 REST API。我可以很容易地想到简单地使用一系列路径和表单数据执行 PUT,但似乎有人应该已经设计了一个更好的解决方案。

是否有将多个不同的 REST API 请求组合成单个请求以避免延迟的最佳实践,或者是否有更好的方法来处理此类情况?

最佳答案

Google 的 Gmail API 支持这一点,它有一个非常可靠、可重用的 API。

https://developers.google.com/gmail/api/guides/batch

长话短说,你的 API 有一个 POST /batch端点,在请求正文中,您发送多个 HTTP 请求。响应将被类似地编码。
这需要服务器端和客户端逻辑,但非常通用且可重用。

例子:

POST /batch HTTP/1.1
Content-Type: multipart/mixed; boundary=batch_foobarbaz
Content-Length: total_content_length

--batch_foobarbaz
Content-Type: application/http

GET /farm/v1/animals/pony

--batch_foobarbaz
Content-Type: application/http

PUT /farm/v1/animals/sheep
Content-Type: application/json
Content-Length: part_content_length
If-Match: "etag/sheep"

{
  "animalName": "sheep",
  "animalAge": "5"
  "peltColor": "green",
}

--batch_foobarbaz
Content-Type: application/http

GET /farm/v1/animals
If-None-Match: "etag/animals"

--batch_foobarbaz--

关于api - 将多个 REST API 请求合并为一个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26383797/

相关文章:

java - 你能控制java线程的延迟吗?

c++ - _mm256_setr_epi32() 的延迟和吞吐量

android - 对于移动应用程序来说,使用域名连接服务器还是使用 IP 地址哪个更好?

c++ - 如果我的进程在事件之间处于空闲状态,为什么延迟会更大?

api - 关于 QQ API(中文 facebook、twitter)有什么想法吗?

ios - 如何在 POST 请求中附加数据 - Swift

angular - 将 .NetCore3.1 API 部署到 LinuxCentos(Nginx)

javascript - 我怎样才能在javascript中修补这个不需要的和奇怪的迭代?

rest - 找不到时如何处理 Web API ("REST") 中的嵌套资源?

当最终 URL 未知时,HTTP REST 如何创建新资源