GraphQL

由客户端声明所需字段的查询语言:单端点、强类型模式、按需取数,减少多接口拼装;代价是查询复杂度不可控,缓存与限流策略与 HTTP 不同。

示例

示例
query {
  order(id: "1001") {
    id
    total
    customer { name }
  }
}

服务端治理清单

项做法
深度限制限制查询嵌套层数(如 10 层)
复杂度计分按字段权重计分,超阈值拒绝
持久化查询常用查询白名单化,收窄任意查询面
分页强制游标分页,禁用无界列表
必须为查询设置深度、复杂度与超时上限:嵌套与别名叠加可能放大为昂贵扫描。

易错点

  • 无查询复杂度限制,单请求拖垮后端数据库
  • 沿用 HTTP 缓存方案,POST 单端点缓存全部失效

数据来源与参考

  • GraphQL 规范(graphql.org)
  • 《Learning GraphQL》(Porcello & Banks)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌