批量操作请求
advanced/multiple_ops_per_request.md
commit 9623e4d32694118e68ce8706f29e2cfbc6c5b6dc
GraphQL 标准通常假定,每个客户端操作(例如查询或变更)都有一次服务器请求。这在概念上很简单,但有可能效率低下。
一些客户端库——如apollo-link-batch-http,已经在单个 HTTP 请求中添加了批量操作请求的功能,以便于节省网络往返请求并提高性能。当然,在批量操作请求之前,应该进行权衡。
Juniper 服务器集成包使用 JSON 数组支持单个 HTTP 请求中的批量操作请求,这样不需要任何特殊配置就能兼容支持客户端库的批量操作请求。
第三方维护的服务器集成包不需要支持批量操作请求,批量操作请求不属于 GraphQL 官方规范。
假定某个服务器集成支持批操作请求,现执行如下 GraphQL 查询:
{
hero {
name
}
}
单个请求 POST 到服务器的 json 数据是:
{
"query": "{hero{name}}"
}
单个请求响应数据如下:
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}
如果你想在一个 HTTP 请求中运行两次相同的查询,那么要 POST 到服务器的批量 JSON 数据是:
[
{
"query": "{hero{name}}"
},
{
"query": "{hero{name}}"
}
]
批量操作请求响应数据如下:
[
{
"data": {
"hero": {
"name": "R2-D2"
}
}
},
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}
]