GraphQL基础概念
GraphQL允许客户端指定需要获取的数据结构,服务端会按照指定结构返回对应数据,避免了REST API中数据冗余或不足的问题。一个基础的GraphQL查询示例如下,用于获取用户的基本信息:
query GetUser {
user(id: 1) {
id
name
email
}
}纯JavaScript环境发送GraphQL请求
在不依赖任何框架的纯JavaScript环境中,可以使用fetch API发送GraphQL请求,核心是将查询语句作为请求体的一部分传递给GraphQL服务端接口。

基本请求示例
假设GraphQL服务端的接口地址为https://api.ipipp.com/graphql,以下是发送查询请求的完整代码:
// 定义GraphQL查询语句
const query = `
query GetUser {
user(id: 1) {
id
name
email
}
}
`;
// 发送请求
fetch('https://api.ipipp.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: query
})
})
.then(response => response.json())
.then(data => {
console.log('获取到的用户数据:', data.data.user);
})
.catch(error => {
console.error('请求失败:', error);
});处理带变量的查询
GraphQL支持变量传递,让查询更加灵活,以下是带变量的查询实现:
// 定义带变量的查询语句
const query = `
query GetUser($userId: Int!) {
user(id: $userId) {
id
name
email
}
}
`;
// 定义变量值
const variables = {
userId: 2
};
fetch('https://api.ipipp.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: query,
variables: variables
})
})
.then(response => response.json())
.then(data => {
console.log('获取到的用户数据:', data.data.user);
})
.catch(error => {
console.error('请求失败:', error);
});使用Apollo Client简化开发
Apollo Client是JavaScript生态中常用的GraphQL客户端工具,封装了请求发送、缓存管理等能力,能大幅简化开发流程。以下是使用Apollo Client的基础步骤。
安装依赖
通过npm安装Apollo Client相关依赖:
npm install @apollo/client graphql
初始化客户端并发送请求
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
// 初始化Apollo Client
const client = new ApolloClient({
uri: 'https://api.ipipp.com/graphql',
cache: new InMemoryCache()
});
// 定义查询语句
const GET_USER = gql`
query GetUser {
user(id: 1) {
id
name
email
}
}
`;
// 发送请求
client.query({
query: GET_USER
})
.then(result => {
console.log('获取到的用户数据:', result.data.user);
})
.catch(error => {
console.error('请求失败:', error);
});常见注意事项
- GraphQL查询语句中的字段名需要和后端定义的schema保持一致,否则会返回错误
- 生产环境中建议为GraphQL请求添加认证头,比如Token信息,提升接口安全性
- 如果请求失败,优先检查返回的错误信息,通常错误会包含具体的错误原因和位置提示
- 对于复杂的查询场景,可以使用GraphQL的片段(Fragment)复用重复的字段定义,减少代码冗余
JavaScriptGraphQLgraphql_requestApollo_Clientquery修改时间:2026-06-05 02:17:18