GraphQL 查询代价分析的原则性方法
软件工程
2020-09-15 v1 编程语言
摘要
Web API 的格局正在演进,以满足新的客户端需求并便利提供者予以实现。近期一种 Web API 模型是 GraphQL,它既是一种查询语言也是一种运行时。借助 GraphQL,客户端查询表达其想要检索或变更的数据,而服务器以恰好那些数据或变更作为响应。GraphQL 的表现力对服务提供者而言存在风险,因为客户端可以简洁地请求海量数据,而响应过度复杂的查询可能代价高昂或破坏服务可用性。近期的实证工作表明许多服务提供者面临风险。使用传统 API 管理方法并不充分,从业者缺乏估计和度量所接收 GraphQL 查询代价的原理性手段。本工作中,我们提出一种线性时间的 GraphQL 查询分析,可在不执行查询的情况下度量其代价。我们的方法可应用于独立的 API 管理层,并与任意 GraphQL 后端配合使用。与现有静态方法相比,我们的分析支持影响查询代价的常见 GraphQL 约定,且基于我们对 GraphQL 语义的形式化规约可证明正确。我们利用针对两个商业 GraphQL API 的新型 GraphQL 查询-响应语料库展示了方法的潜力。我们的查询分析持续获得代价上界,相对于真实响应大小足够紧致,对服务提供者具有可操作性。相比之下,现有静态 GraphQL 查询分析因未能支持 GraphQL 约定而表现出高估与低估。
引用
@article{arxiv.2009.05632,
title = {A Principled Approach to GraphQL Query Cost Analysis},
author = {Alan Cha and Erik Wittern and Guillaume Baudart and James C. Davis and Louis Mandel and Jim A. Laredo},
journal= {arXiv preprint arXiv:2009.05632},
year = {2020}
}
备注
Published at the ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE) 2020