将多个REST API请求合并到一个请求中?

时间:2014-10-15 13:26:36

标签: api rest latency

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

使用此API,我可以使用PUT companies/1和PUT persons/2families/3等来更新公司或人员详细信息。

我想使用此API与其他应用程序进行常规同步。这将涉及数以十万计的REST API请求,其中大多数是此类更新。每个请求只需要很少的时间,但每个请求的延迟会占用相当多的时间。

有没有什么方法可以创建REST API,它可以将多个请求合并为一次。我可以很容易地想到使用一系列路径和formdata来做一个PUT,但似乎有人应该已经设计了一个更好的解决方案。

是否有最佳做法将多个不同的REST API请求合并到一个请求中以避免延迟,或者是否有更好的方法来处理这样的情况?

2 个答案:

答案 0 :(得分:3)

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--

答案 1 :(得分:1)

延迟只会受到一系列请求的影响。使用并行请求可以解决问题。

这里没有最佳做法。

  • 您可以将包含多个项目的PATCH发送到馆藏 PATCH /companies [{id:1, ...}, {id: 2, ...}, ...]
  • 您可以定义一个可以包含不同类型项目的复合集合 PATCH /resources [{id: 1, "rdf:type": "app:Company", ...}, {...}]

我不喜欢他们,但那只是一个意见......