于10月8日至10日加入我们,在纽约市学习关于GraphQL Federation和API平台工程的最新的技巧、趋势和新闻。参加2024年在纽约市的GraphQL峰会
文档
免费开始

合约概览

向不同消费者发送你的supergraph的不同子集


此功能仅适用于 GraphOS企业计划.
您可以通过注册免费 企业试用版.

统一 为公司数据提供单一真相。这些数据可能具有不同消费者、不同需求和权限。合约使您可以向不同消费者发送不同的supergraph子集。

Filter schema
according to contract A
Filter schema
according to contract B
Complete
supergraph schema
Contract
schema B
Contract
schema A

每个可以包括来自每个的不同和数据类型。

合约的好处

提供以下好处:

  • 选择数据访问: 通常包含大量数据,包括与特定受众不相关的信息。合约声明式地授予对超图特定子集的访问权限,因此图消费者仅访问相关数据。

  • 数据安全和隐私: 合约通过允许排除特定消费者访问机密数据来加强数据安全和隐私保护。这确保只有授权方才能访问敏感数据。

  • 文档和指南: 合约向客户端开发者提供文档。针对合约的特定文档帮助开发者更好地理解和更容易地与他们授权访问的数据交互。

合约如何工作

每个合约将您的超图模式的部分过滤到一个不同的GraphOS变体中:

Contract variant
Contract variant
Source variant
Filter schema
according to contract A
Filter schema
according to contract B
Contract
schema A
Contract
schema B
Complete
supergraph schema

合约通过向您的@tag 添加到您的@tag声明哪些类型和字段要包含或排除在特定的合约变体中。

源变体子图架构
type Product {
id: ID!
name: String!
codename: String! @tag(name: "internal")
}
合约变体API架构
type Product {
id: ID!
name: String!
# codename field is filtered out of this contract variant
}

在上面的示例中,合约排除了使用internal @tag标记的类型和字段。生成的合约架构定义了针对外部受众的定制的 API。

如何使用合约

通常,您创建合约以支持合约路由器合约文档或二者都支持。

合同路由器

您可以将自己的 托管实例 部署为 ,该路由器使用 contract 架构。使用合同路由器端点的客户端只能执行 GraphQL ,这些操作由合同架构支持:

Standard router
Contract router
Supergraph
(all subgraphs)
Admin app
User app

这使您能够隐藏仍在开发中的实验性类型和 字段,或限制特定受众只能访问所需的部分图。

合同 路由器 可以安全地连接到与其他路由器相同的 子图 实例,因为其客户端只能与合同架构中表示的数据进行交互。这不会影响内部路由。例如,可以继续在 @requires 选择集中使用

注意

源变体 中的 @tag 标签也存在于合同变体的超图架构中。

合同文档

中,每个 contract 变体都有自己的 README、架构参考和探索者。如果您 公开合同变体,可以将这些资源提供给外部客户端开发者,帮助他们与您的图特定部分进行交互,同时省略不相关的类型和 字段

联邦 1 的限制

合同 的行为取决于您的图使用 的哪个版本——是联邦 1 还是联邦 2。最重要的是,使用联邦 1 的图不能使用 @tag 排除以下项:

  • 自定义 类型(在联邦 1 中无法排除默认标量类型)
  • 枚举类型或它们的值
  • 输入类型或它们的 或接口字段
  • 字段或接口字段的

合同与联邦 2

要创建使用联邦 2 的合同变体,合同的源变体也必须使用联邦 2。了解如何将现有变体移至联邦 2。

将现有合同移至联邦 2

如果一个联邦1 源变种已经有一个或多个相关的,则无法将其或其合同变种移动到联邦2。相反,您需要按照以下步骤删除并重新创建您的合同变种:

💡 提示

上一页
发布
下一页
创建和使用合同
评价本文评价在GitHub上编辑编辑论坛Discord

版权所有2024Apollo Graph Inc.,又称Apollo GraphQL。

隐私政策

公司