如何在Apollo GraphQL/Apollo Link Rest中限制嵌套数组条目数量?
问题解答
你的需求是可行的,但当前的查询写法无法实现预期效果,原因及解决方法如下:
问题原因
你使用的@rest指令会直接从指定的REST接口/doctors/拉取完整数据集,之后在Items字段上添加的(limit:10)只是在客户端层面做过滤,但此时REST接口已经返回了全部Items数据,所以你会看到完整列表。
解决方法
1. 利用后端REST接口的参数支持
如果你的后端REST接口本身支持通过URL参数限制返回条数(比如常见的limit、pageSize等参数),直接在@rest的path中携带该参数即可:
query { doctors @rest(type: "doctors", path: "/doctors/?limit=10") { Result { Id FirstName LastName Items { id title } } } }
这种方式会让REST接口只返回10条Items数据,从根源上减少不必要的数据传输。
2. 在GraphQL服务端添加字段级截断逻辑
如果后端REST接口不支持条数限制参数,需要在你的GraphQL网关(或服务端)中为Items字段添加自定义解析逻辑,对拉取到的全量数据进行截断:
- 以Apollo为例,可在REST Data Source的解析函数中,对返回的
Result.Items执行slice(0,10)操作后再返回。 - 其他GraphQL框架逻辑类似,只需在对应字段的resolver里处理数据截断。
注意事项
不要依赖客户端层面的limit参数过滤,这会导致全量数据传输,浪费带宽和服务端资源。
内容的提问来源于stack exchange,提问作者DAMAR225
相关产品推荐
相关产品推荐

