GraphQL 是一种面向 API 的查询语言,同时也是一个针对类型化 schema 来响应这些查询的运行时。客户端发送一个请求,精确描述它想要的字段,服务器就返回完全对应的结构——不多也不少。
它与 REST 有何不同
- 单一 endpoint vs 多个 endpoint。 REST 暴露很多 URL(
/users、);GraphQL 只暴露一个 endpoint,你通过查询体来选取数据。
/users/1/posts/graphql# 一个请求同时取回一个 user 及其 posts 的标题——无需第二次往返
query {
user(id: "1") { # 通过 id 挑选 user
name # 只有我们列出的字段才会返回
posts { # 嵌套:在同一个查询里沿着关系继续取
title
}
}
}
响应与查询精确对应:{ "data": { "user": { "name": "...", "posts": [{ "title": "..." }] } } }。
面试官问这个是想看你是否理解核心权衡:GraphQL 消除了 over/under-fetching 并赋予客户端灵活性,代价是更高的服务端复杂度(resolver、缓存、查询成本控制)。理解它为什么存在——而不只是语法——说明你能选对工具。