10月8日至10日加入我们,在纽约市学习关于 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。加入我们参加2024年纽约市的 GraphQL Summit
文档
免费开始
您正在查看该软件先前版本的文档。 切换到最新稳定版本。

使用别名


在生成代码时,使用您的名称生成匹配的泛型模型,并使用平面层次结构。以下

GetContact.graphql
query GetContact {
contact(name: "Byron") {
# The generated model will be named `HomeAddress`
homeAddress {
street
}
# The generated model will be named `WorkAddress`
workAddress {
country
}
}
}

将生成如下模型

class GetContact {
class Data { ... }
class Contact { ... }
class HomeAddress { ... }
class WorkAddress { ... }
}

命名规则的驱动原则是

  • 名称作为模型名称:我们考虑使用模式类型名称,但这将导致许多冲突。在上例中,例如,我们将有两个不同的 Address 类。
  • 保持类的扁平层次结构:我们考虑使用嵌套类,但这可能导致非常长的名称,而扁平层次结构更容易阅读。
  • 当它是列表时,将 字段 名称变为单数:如果您的 查询 包含列表字段,例如 nodes (例如),生成 List<Node> 而不是 List<Nodes> 更有意义。

这些原则对大多数情况都非常适用,但不能解决名称冲突或特殊的单数规则。为了解决这些问题,您可以使用 别称

使用别称来避免名称冲突

由于类层次结构是扁平的,查询树中不同部分具有相同名称的两个 字段 可能导致名称冲突。拥有大量 nodesedges 字段 的简化式分页可能会通常触发名称冲突。为了避免这些问题,Apollo Kotlin 将向您的模型附加数字后缀:'

GetContact.graphql
query GetContacts {
contact(name: "Byron") {
# The generated model will be named `HomeAddress`
homeAddress {
street
}
}
emergencyContact {
# The generated model will be named `HomeAddress1` by default
homeAddress {
street
}
}
}

后缀避免了名称冲突,但感觉有点不合适,而且很难记住 HomeAddress1 是什么的。为了解决此问题,您可以对 进行

GetContact.graphql
query GetContacts {
contact(name: "Byron") {
# The generated model will be named `HomeAddress`
homeAddress {
street
}
}
emergencyContact {
# With an alias, the generated model will be named `EmergencyAddress`
emergencyAddress: homeAddress {
street
}
}
}

使用别称来解决单数化规则问题

单数化代码在大多数情况下有效,但不包含英语词典中的所有例外。

如果您遇到一个,请告诉我们,这样我们可以在这里放置一个有效的示例(我们通常在前进中解决这些问题,但的确还有一些问题在野外)。在我们修复单个化代码之前,您可以使用别名来控制代码中模型的名字。

上一页
强制非空性
下一页
与Java一起使用
评价文章评价在GitHub上编辑编辑论坛Discord

版权所有2024Apollo Graph Inc.,商号 Apollo GraphQL。

隐私政策

公司