加入我们,于10月8日至10日在纽约市,了解关于 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。加入我们在纽约市举办的 GraphQL 峰会 2024
文档
免费开始

HTTP 链接

使用 HTTP 获取 GraphQL 结果。


建议阅读Apollo 链接概述 在学习个别链接之前。

HttpLink 是一个终止链接,它通过 HTTP 将 GraphQL 操作发送到远程端点。 默认使用 HttpLink,当您向 ApolloClient 构造函数提供 uri 选项时。

HttpLink 支持POST和GET请求,并且可以在每个操作级别上配置HTTP选项。您可以使用这些选项进行身份验证、、动态URI和其他细粒度更新。

用法

导入 HttpLink 类并初始化链接如下:

import { HttpLink } from '@apollo/client';
const link = new HttpLink({
uri: "https://127.0.0.1:4000/graphql"
// Additional options
});

HttpLink 构造函数接受一个选项对象,该对象可以包括以下字段。请注意,您还可以使用 操作上下文 在每个操作的基础上覆盖这些选项。

名称
类型
描述
uri

StringFunction

要发送请求的 GraphQL 端点的 URL。也可以是一个函数,该函数接受一个 Operation 对象并返回用于该操作的字字符串 URL。

默认值为 /graphql

includeExtensions

布尔值

如果为真,则在发送到您的 GraphQL 端点的操作中包含 extensions

默认值为 false

fetch

函数

发送 HTTP 请求到您的 GraphQL 端点时,而不是直接调用 Fetch API 时使用函数。此函数必须符合 fetch 的签名。

默认情况下,如果您的运行环境不可用,则使用 Fetch API。

请参阅 自定义 fetch

headers

对象

表示包含在每个 HTTP 请求中的头部的对象,如 {Authorization: 'Bearer abc123'}

preserveHeaderCase

布尔值

如果设置为 true,则头部名称不会自动转换为小写。这允许非 http-spec-compliant 服务器,这些服务器可能期望使用大写名称的头部。

默认值为 false

credentials

字符串

为每个 fetch 调用使用的凭据策略。可以是 omitincludesame-origin

fetchOptions

对象

包含用于每个 fetch 调用的选项的对象。如果此对象中未包含特定选项,则默认值将用于该选项。

请注意,如果您将 fetchOptions.method 设置为 GETHttpLink 将遵循 标准的 GraphQL HTTP GET 编码

查看可用选项

useGETForQueries

布尔值

如果 true,链接在向您的 GraphQL 端点发送 操作 时使用 HTTP GET 请求。 操作仍然使用 POST 请求。如果您想 所有 操作 都使用 GET 请求,请设置 fetchOptions.method

默认值为 false

print

函数

一个可选的函数,用于将 查询 转换为字符串。它接受一个 ASTNode(通常是一个 DocumentNode),以及原始的 print 函数作为参数,并期望返回一个字符串。此选项可以与 stripIgnoredCharacters 一起使用,以删除查询中的空白字符。

import { stripIgnoredCharacters } from 'graphql';
const httpLink = new HttpLink({
uri: '/graphql',
print: (ast, originalPrint) => stripIgnoredCharacters(originalPrint(ast)),
});

默认情况下,使用裸露的 GraphQL print 函数

上下文选项

HttpLink在向您的 GraphQL 端点发送请求之前检查 当前操作的 context 中的某些值。先前链接链中的链接可以设置这些值以自定义 HttpLink 对每个操作的 行为。

其中一些值也可以作为选项提供给 HttpLink 构造函数。如果两个都提供了值,则 context 中的值优先。

名称
类型
描述
uri

StringFunction

要发送请求的 GraphQL 端点的 URL。也可以是一个函数,该函数接受一个 Operation 对象并返回用于该操作的字字符串 URL。

默认值为 /graphql

headers

对象

代表要在 HTTP 请求中包含的标题的对象,例如 {Authorization: 'Bearer abc123'}

credentials

字符串

为此 fetch 调用应用的凭据策略。可以是 omitinclude, 或 same-origin

fetchOptions

对象

一个对象,包含用于调用 fetch 的选项。如果该对象中不包含特定选项,将使用该选项的默认值。

请注意,如果您将 fetchOptions.method 设置为 GETHttpLink 将遵循 标准的 GraphQL HTTP GET 编码

查看可用选项

http

对象

一个对象,配置高级 HttpLink 功能,例如对持久化查询的支持。选项列在 http 选项字段

http 选项字段

名称
类型
描述
includeExtensions

布尔值

如果为真,会在发送到你的 GraphQL 终端的操作中包含 extensions 字段。

默认值为 false

includeQuery

布尔值

如果为 false,则不会在请求中包含 GraphQL 查询字符串。如果你正在发送使用持久化查询的请求,请设置此选项。

默认值是 true

preserveHeaderCase

布尔值

如果设置为 true,则头部名称不会自动转换为小写。这允许非 http-spec-compliant 服务器,这些服务器可能期望使用大写名称的头部。

默认值为 false

操作结果

在你的 GraphQL 终端(成功)响应了发送的操作的结果后, HttpLink 将其设置为操作 contextresponse 字段。这允许链中的每个前置链接在响应返回之前与之交互。

处理错误

HttpLink 区分客户端错误、服务器错误和 GraphQL 错误。你可以将 onError 链接 添加到你的链接链中,通过回调处理这些错误。

以下类型的错误可能发生

Error描述回调Error 类型
Client Parse请求正文不可序列化,例如由于循环引用。errorClientParseError
Server Parse服务器响应无法解析(response.json()errorServerParseError
Server Network服务器响应该非 2xx 的 HTTP 状态码。errorServerError
Server Data服务器响应中没有包含 dataerrorserrorServerError
GraphQL Error解析 GraphQL 操作至少出现一个错误,它出现在 errors 字段中。next对象

因为许多服务器实现可以在服务器网络错误时返回有效的 GraphQL 结果,因此抛出的 Error 对象包含了解析后的服务器结果。服务器数据错误也会接收到解析后的结果。

所有错误类型都继承了从泛型javascript Error 对象继承的 namemessage 和 nullable stack 属性。

//type ClientParseError
{
parseError: Error; // Error returned from response.json()
};
//type ServerParseError
{
response: Response; // Object returned from fetch()
statusCode: number; // HTTP status code
bodyText: string // text that was returned from server
};
//type ServerError
{
result: Record<string, any>; // Parsed object from server response
response: Response; // Object returned from fetch()
statusCode: number; // HTTP status code
};

自定义 fetch

您可以将 fetch 选项提供给 HttpLink 构造函数以启用许多自定义网络需求。例如,您可以根据计算得到的头部信息修改请求,或者基于 操作's 的详细信息计算端点 URI。

如果您针对的环境不支持 Fetch API(例如旧版本的浏览器或服务器)您可以根据需要提供不同的 fetch 实现。我们建议对旧版本的浏览器使用 unfetch,在 Node 中运行时使用 node-fetch

自定义认证

此示例在调用 fetch 之前向每个请求添加自定义的 Authorization 头部:

const customFetch = (uri, options) => {
const { header } = Hawk.client.header(
"http://example.com:8000/resource/1?b=1&a=2",
"POST",
{ credentials: credentials, ext: "some-app-data" }
);
options.headers.Authorization = header;
return fetch(uri, options);
};
const link = new HttpLink({ fetch: customFetch });

动态 URI

此示例在调用 fetch 之前自定义端点 URL 的 查询 参数:

const customFetch = (uri, options) => {
const { operationName } = JSON.parse(options.body);
return fetch(`${uri}/graph/graphql?opname=${operationName}`, options);
};
const link = new HttpLink({ fetch: customFetch });
上一页
概览
下一页
HTTP批处理
评价此文章评分在 GitHub 上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即 Apollo GraphQL。

隐私政策

公司