我正在为我的应用程序开发REST API。
使用此API,我可以使用PUT companies/1
和PUT persons/2
,families/3
等来更新公司或人员详细信息。
我想使用此API与其他应用程序进行常规同步。这将涉及数以十万计的REST API请求,其中大多数是此类更新。每个请求只需要很少的时间,但每个请求的延迟会占用相当多的时间。
有没有什么方法可以创建REST API,它可以将多个请求合并为一次。我可以很容易地想到使用一系列路径和formdata来做一个PUT,但似乎有人应该已经设计了一个更好的解决方案。
是否有最佳做法将多个不同的REST API请求合并到一个请求中以避免延迟,或者是否有更好的方法来处理这样的情况?
答案 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 /companies [{id:1, ...}, {id: 2, ...}, ...]
PATCH /resources [{id: 1, "rdf:type": "app:Company", ...}, {...}]
我不喜欢他们,但那只是一个意见......