GraphQL是一种独立于JavaScript的强类型API查询语言和运行时,通过Schema定义数据结构,客户端按需查询字段,服务端返回精确JSON,通常仅暴露一个HTTP端点;前端常用Apollo Client或URQL集成,后端可用Apollo Server搭配Express等框架实现。
GraphQL 不是 JavaScript 的一部分,而是一种独立的 API 查询语言和运行时,但它在 JavaScript 生态中被广泛使用——尤其在前端(如 React、Vue)和 Node.js 后端中。它不替代 REST,而是提供一种更灵活、精准获取数据的方式:客户端按需声明要什么字段,服务端按需返回,避免过度获取或请求多次。
GraphQL 的本质是一个强类型的查询协议。服务端定义一个 Schema(用 GraphQL SDL 语法),描述所有可查询的数据结构(比如 User、Post)、字段、关系和操作(query/mutation/subscription)。客户端发送纯字符串格式的查询(如 { user(id: "1") { name email } }),服务端解析执行并返回严格匹配的 JSON。
关键点:
/graphql)最常用方式是搭配客户端库,不手动发 fetch 请求。主流选择是 Apollo Client 和 URQL,它们负责缓存、状态管理、自动类型推导和 DevTools 支持。
以 Apollo Client 为例(v3+):
npm install @apollo/client graphql
gql 模板字面量写查询,配合 useQuery(React)等 Hook 执行示例片段:
import { gql, useQuery } from '@apollo/client';
const GET_USER = gql`
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
posts { title }
}
}
`;
function UserProfile({ id }) {
const { loading, error, data } = useQuery(GET_USER, { variables: { id } });
// 渲染逻辑...
}
用 Graph
QL.js(官方参考实现)或封装更好的框架如 Apollo Server。
基本流程:
简单例子(Apollo Server + Express):
const { ApolloServer } = require('apollo-server-express');
const { typeDefs, resolvers } = require('./schema');
const server = new ApolloServer({ typeDefs, resolvers });
await server.start();
server.applyMiddleware({ app, path: '/graphql' });
如果只是临时调试或简单场景,可以直接用 fetch 发送 GraphQL 请求:
fetch('/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `query { user(id: "1") { name } }`,
variables: {}
})
}).then(r => r.json()).then(console.log);
但注意:缺少错误统一处理、缓存、加载状态、类型提示等,仅适合原型或脚本任务。
基本上就这些。GraphQL 本身和 JavaScript 无关,但它的设计天然契合 JS 的灵活与表达力——尤其配合现代前端框架和类型工具,能显著提升数据获取效率和开发体验。