我的RESTful服务允许batching requests。
我正在尝试在Fetch API的帮助下将请求合并到一个批处理中:
let req1 = {
url: "/cups/count",
options: {
method: 'GET',
headers: {
'Content-Type': 'application/http'
}
}
},
req2 = {
url: "/spoons/count",
options: {
method: 'GET',
headers: {
'Content-Type': 'application/http'
}
}
},
authToken = "Bearer my_token123",
batchUrl = "http://something.com/batch",
options = {
method: 'POST',
headers: {
'Authorization': authToken,
'Content-Type': 'multipart/mixed'
},
body: {req1, req2}
};
return fetch(batchUrl, options)
.then(response => response.json())
.then(items => dispatch(batchSuccess(items)))
.catch((err) => {
console.log(err)
});
然而它返回错误 - 错误的请求。我想我可能会以错误的方式组合HTTP请求。
有更简单的方法吗?
我可以在网络Chrome开发工具中看到嵌套的HTTP请求吗?
答案 0 :(得分:2)
您的代码无效,因为它不遵循multipart/mixed
请求格式:
Content-Type
标题中,没有边界信息。为了发送有效的multipart/mixed
请求,有一个node.js模块batchelor。根据介绍页面,它的用法非常简单。
如果您想从浏览器发送multipart/mixed
请求,您可以使用构建工具(gulp,webpack等)将batchelor编译为类似" batchelor-compiled.js"并以HTML格式导入。
对于开发者工具,我在Chrome中找不到任何内容,但在Firefox调试窗口中可以看到子请求" Params"标签
答案 1 :(得分:2)
以下是将Fetch API与Gmail Batch REST API结合使用的批处理请求的示例。
这将同时获取多条消息的内容。
const response = await fetch("https://www.googleapis.com/batch/gmail/v1", {
headers: {
"Content-Type": "multipart/mixed; boundary=batch_boundary",
Authorization: "Bearer <access_token>",
},
method: "POST",
body: `--batch_boundary
Content-Type: application/http
Content-ID: 1
GET /gmail/v1/users/me/messages/{message-id-1}
--batch_boundary
Content-Type: application/http
Content-ID: 2
GET /gmail/v1/users/me/messages/{message-id-2}
--batch_boundary--`,
});
console.log(await response.text());