欢迎于10月8-10日来纽约市参加我们的活动,了解关于GraphQL联合和API平台工程的最新技巧、趋势和新闻。参加2024年纽约市的GraphQL峰会
文档
免费开始

联邦架构

了解不同类型的 GraphQL 模式


联合的使用多种“类型”的 :

(Composition succeeds)
(Remove routing machinery)
Subgraph
schema
A
Subgraph
schema
B
Subgraph
schema
C
🛠
Composition
Supergraph schema
(A + B + C + routing machinery)
API schema
(A + B + C)

  • 子图模式。每个 都有一个独特的模式,表示它可以解析的 supergraph 中的哪些类型和
    • 这些是您团队唯一需要手动定义的模式。
  • 超级图模式。这个模式结合了您所有 subgraph 模式中的所有类型和 字段,以及一些联邦特定的信息,这告诉您的 哪些子图可以解析哪些字段。
    • 该模式是执行以下操作的结果组合 对您的子图模式集合。
  • API 模式。这个模式和 相似,但它省略了被认为是“机制”的联邦特定类型、字段,这些不是您公共 API 的部分。
    • 这是一个您的 router 向客户端公开的模式,客户端不需要了解 的内部实现细节。

让我们看看一个例子!

子图模式

以下是一个电子商务公司超级图中的三个的示例模式。每个子图都作为独立的 API实现:

用户
type Query {
me: User
}
type User @key(fields: "id") {
id: ID!
username: String! @shareable
}
# (Subgraph schemas include
# this to opt in to
# Federation 2 features.)
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3",
import: ["@key", "@shareable"])
产品
type Query {
topProducts(first: Int = 5): [Product]
}
type Product @key(fields: "upc") {
upc: String!
name: String!
price: Int
}
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3",
import: ["@key", "@shareable"])
评论
type Review {
body: String
author: User @provides(fields: "username")
product: Product
}
type User @key(fields: "id") {
id: ID!
username: String! @external
reviews: [Review]
}
type Product @key(fields: "upc") {
upc: String!
reviews: [Review]
}
# (This subgraph uses additional
# federated directives)
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3",
import: ["@key", "@shareable", "@provides", "@external"])

如这些模式所示,多个子图可以为单个类型贡献独特的字段。例如,产品子图和评论子图都为Product类型

超级图模式

超级图模式模式组合的输出。它具有以下用途:

  • 它为你的路由器提供每个子图的名称和端点URL。
  • 它包含了你所有子图中定义的所有类型和字段
  • 它告诉你的路由器哪些子图可以解析哪些GraphQL字段。

以下是与上述子图模式组合的超级图模式:

如您所见,超级图模式包含了大量的联邦特定添加!这些添加仅供路由器使用,您永远不需要手动添加它们。

API模式

路由器使用其超级图模式生成一个API模式,将其作为您的实际GraphQL API公开。此模式清晰且逻辑地表示了您的子图模式的组合:

type Product {
name: String!
price: Int
reviews: [Review]
upc: String!
}
type Query {
me: User
topProducts(first: Int = 5): [Product]
}
type Review {
author: User
body: String
product: Product
}
type User {
id: ID!
reviews: [Review]
username: String!
}

与超级图模式不同,此模式隐藏了您的GraphQL API由多个不同的GraphQL API组成的实际情况。

上一页
JetBrains IDE 支持
下一页
组合
评分文章评分在 GitHub 上编辑编辑论坛Discord

©2024Apollo Graph Inc.,商号 Apollo GraphQL。

隐私政策

公司