于10月8日至10日在纽约市与我们相聚,了解关于 GraphQL 联盟和 API 平台工程的最新技巧、趋势和新闻。参加2024年在纽约市举行的 GraphQL 大会
文档
免费开始

Apollo 沙箱

使用 GraphOS 工具,无需 Apollo 账户


Apollo 沙箱是专门用于本地开发的一种特殊模式。沙箱通过加载正在运行的的 schema,而不是从 Apollo 注册表中获取已发布 schema。

沙箱提供访问以下GraphOS Studio功能:

  • 探索器
  • Schema 参考
  • Schema 检查以及对已注册的 diff(针对已登录用户)

您还可以在没有 Apollo 账户的情况下离线使用沙箱。您还可以将沙箱嵌入您的个人网站。

启动沙箱

概述视频

连接到 GraphQL 服务器

当您打开沙箱时,它会自动尝试连接到运行在GraphQL 服务器https://127.0.0.1:4000上的。您可以使用探索器顶部的框将此 URL 更改为任何由您的浏览器可访问的本地或远程端点:

Sandbox URL field

您还可以通过提供URL 参数来更改默认端点。

注意

要尝试示例GraphQL API的沙箱,您可以将 URL 设置为:

https://flyby-locations-sub.herokuapp.com/

模式差异

如果您从沙箱登录到GraphOS Studio,您可以将您的沙箱模式与GraphOS模式库中您可以访问的任何或单实体图进行比较。

沙箱,从左侧导航面板打开模式差异页面。然后使用下拉菜单选择任何可访问的进行比较。

Schema diff in Sandbox

注意

如果您在沙箱中使用子图,此差异显示的是最初定义的模式,而不是包括联盟特定(例如Query._entities生成的。您可以在沙箱的页面中查看生成的子图模式。

除了在当前页面查看差异外,您还可以单击右上角的运行检查,运行针对所选的模式检查。

模式检查

如果您从沙箱登录GraphOS Studio,您可以在您的沙箱模式和任何您在Apollo注册表中可以访问的之间运行模式检查

注意

具有消费者角色的组织成员无法运行

沙盒 中打开,然后从左侧导航栏打开 检查 页。出现一个对话框,您可以从中选择要对其运行检查的组织、体,然后点击 运行检查。检查完成时,沙盒显示结果摘要。要查看 Studio 中的详细结果,请点击 查看详情

子图检查

您可以在 上运行 subgraph 检查。如果您在与子图一起使用沙盒,可以使用子图下拉列表来选择您想要检查更改的子图。

Sandbox subgraph check prompt

当您点击 运行检查 时,沙盒首先使用您本地的 子图模式 和其他子图已发布模式执行构建检查。如果 成功,沙盒接着像平常那样执行 检查并显示所有检查的结果。如果组合失败,沙盒不会执行操作检查,并显示组合错误。

离线沙盒

如果您正在查询在 localhost 上运行的 graph,则可以在没有互联网连接的情况下使用沙盒。要这样做,在网络连接状态下至少打开一次您的浏览器中的沙盒。然后您可以使用该浏览器在没有网络的情况下打开沙盒。

重新连接

Sandbox 会自动在您的互联网连接恢复时重新连接。当它这样做时,可能会显示通知,称您的 GraphOS Studio 应用程序版本至少已过期 24 小时。您可以点击通知将所有浏览器打开的 Studio 标签页更新到最新版本。

注意

此通知仅表示 GraphOS Studio UI 已过时。您的 Studio 数据始终保持最新。

沙盒中的操作集合

请参阅 本节

URL 参数

您可以提供 URL 参数来定制页面加载时沙盒的初始状态。这可以在用户从链接打开沙盒时更快地开始使用沙盒。

以下 URL 参数被支持

参数描述
endpoint沙盒分析和发送请求的 GraphQL 端点 URL。默认值是 https://127.0.0.1:4000
document一个 GraphQL 操作,用于在加载时填充到探针的编辑器。
variables一个包含初始变量值的序列化 JSON 对象,用于在加载时填充到探针。
headers一个包含初始 HTTP 标头值的序列化 JSON 对象,用于在加载时填充到探针。

例如,以下 URL 设置了所有支持的参数

示例 URL
https://studio.apollographql.com/sandbox/explorer?endpoint=https://127.0.0.1:4200&document=query hello($name: String!) { hello(name: $name)}&variables={"name": "Sandbox User"}&headers={"Cache-Control": "no-cache"}

注意

为了可读性,上述URL没有被URL编码。大多数浏览器会自动编码URL,但在向用户提供参数值之前对参数值进行URL编码是最佳实践。

上述示例URL以以下初始状态打开了Sandbox

Sandbox with endpoint, document, and variables pre-populated
Sandbox with headers pre-populated

嵌入式Sandbox

您可以在自己的网站上嵌入式Sandbox。这可以用于与开发环境中的GraphQL端点或具有CORS限制的端点交互。

设置

  1. 打开Sandbox。
  2. 在浏览器的设置选项卡下,找到嵌入式Sandbox并点击复制代码片段。会出现一个包含选项和代码片段的对话框。

  3. 在对话框中,使用选项卡选择适用于您的用例的代码片段

    • 对于可以使用npm install@apollo/sandbox包的React应用程序,请使用React
    • 对于可以使用npm install@apollo/sandbox包的非ReactJavaScript应用程序,请使用JavaScript
    • 要使用CDN上托管的嵌入式Sandbox,请使用已构建文件
  4. 点击复制来复制片段,然后将其粘贴到您的HTML代码中。

选项

嵌入式Sandbox对象接受一个选项对象,其结构如下(以下详细描述了每个选项):

{
initialEndpoint: 'https://127.0.0.1:4000',
handleRequest: (endpointUrl, options) => {
return fetch(endpointUrl, {
...options,
headers: {
...options.headers,
authorization: `token ${token}`
},
})
},
hideCookieToggle: true,
}

以下是可以包含在传递给new EmbeddedSandbox的实例中的可选选项:

名称 /
类型
描述
initialEndpoint

字符串

Sandbox在初始加载时检查的GraphQL端点的URL。Sandbox使用从该端点获得的模式填充其页面。

默认值是https://127.0.0.1:4000

应仅将非生产端点传递到沙盒。沙盒由模式introspection提供动力,我们建议在生产环境中禁用introspection。为了为生产端点提供类似于沙盒的体验,我们建议使用公共变体嵌入式探索器

handleRequest

(url, options) => Promise

默认情况下,嵌入式沙盒使用fetch API将请求从您的网页发送到指定的GraphQL端点。如果您提供自定义的handleRequest函数,沙盒将使用它来替换所有

如果您需要从嵌入式沙盒发出每项请求均包含特定头信息,则可能想这样做。

hideCookieToggle

布尔值

默认情况下,嵌入式沙盒的连接设置中不显示包括cookies切换。

hideCookieToggle设置为false以启用您的嵌入式沙盒实例用户切换包括cookies设置。

endpointIsEditable

布尔值

默认情况下,嵌入式沙盒有一个用户可编辑的URL输入框。

endpointIsEditable设置为false以防止您的嵌入式沙盒实例用户更改端点URL。

includeCookies

布尔值

如果您希望沙盒传递{ credentials: 'include' }来进行请求,则可以将includeCookies设置为true

如果您传递了handleRequest选项,此选项将被忽略。

有关fetch API和凭据的更多信息,请参阅这里

此配置选项已过时,现在建议使用沙盒中的连接设置cookies切换,并通过initialState.includeCookies设置默认值。

initialState

Object

一个包含有关页面加载时嵌入式沙盒状态的附加选项的对象。

有关支持的子字段,请参阅initialState选项

initialState选项

以下是可以包含在传递给 new EmbeddedSandbox 构造函数的 initialState 选项中的 字段

名称 /
类型
描述
includeCookies

布尔值

如果您想使沙箱默认通过请求传递 { credentials: 'include' },请将此值设置为 true

如果您将 hideCookieToggle 设置为 false,用户可以使用 包括cookie 切换来覆盖此默认设置。(默认情况下,嵌入式沙箱在连接设置中不显示 包括cookie 切换。)

如果您也传递了 handleRequest 选项,则忽略此选项。

有关fetch API和凭据的更多信息,请参阅这里

document

字符串

在沙箱编辑器加载时填充的 URI 编码操作。

如果您省略此选项,沙箱将根据您的模式初始化加载示例

示例

initialState: {
document: `
query ExampleQuery {
books {
title
}
}
`;
}
variables

字符串

负载沙箱时填充的初始化 值的 URI 编码、序列化对象。

如果提供,这些 应用于您为 document 提供的初始 查询。

示例

initialState: {
variables: {
userID: "abc123"
},
}
headers

字符串

包含初始 HTTP 头值的 URI 编码、序列化对象。

示例

initialState: {
headers: {
authorization: "Bearer abc123";
}
}
collectionId & operationId

字符串

加载沙箱时填充的集合 ID 和操作 ID。您可以通过在 Studio 中单击表示此图形的 ... 菜单旁边的操作 并选择 查看操作详细信息 来获取这些值。

示例

initialState: {
collectionId: 'abc1234',
operationId: 'xyz1234'
}
pollForSchemaUpdates

布尔值

如果 true,嵌入式沙箱将定期轮询您的 initialEndpoint 以获取模式更新。

默认值是 true

示例

initialState: {
pollForSchemaUpdates: false;
}
sharedHeaders

Record<string, string>

应用于嵌入式沙箱执行的所有操作的默认头。用户可以关闭这些头的应用,但不能修改其值。

嵌入式沙箱始终将其头包括在其对初始端点的 introspection 查询中。

示例

initialState: {
sharedHeaders: {
authorization: "Bearer abc123";
}
}
上一页
概述
下一页
支持 GraphQL 订阅
评分文章评分在GitHub上编辑编辑论坛Discord

公司