和我们一起参加10月8-10日在纽约市的GraphQL联盟和API平台工程的最新技巧、趋势和新闻。加入我们,在纽约市参加2024年GraphQL峰会
文档
免费开始

使用别名


在生成代码时,使用您的的名称,通过扁平层次结构生成匹配的类型安全模型。以下

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比生成List更有意义。

这些原则在很多情况下都很有效,但不能解决名称冲突或特殊的单数化规则。为了解决这些问题,你可以使用别名

使用别名避免名称冲突

由于类层次结构是扁平的,查询树不同部分中存在同名字段可能会导致名称冲突。在具有许多节点字段的回传式分页中,通常可能会触发名称冲突。为了避免这种情况,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
}
}
}

使用别名处理单复数规则

大多数情况下,以下是关于单复数规则的单复数处理代码工作良好,但它不包含英语字典中的所有例外。

如果您遇到一个,请告诉我们,这样我们就可以在这里添加一个有效示例(我们通常会边走边解决问题,但确实还有几个遗留问题)。在我们修复单复数处理代码之前,您可以使用一个别名来控制代码中模型的名字。

上一页
实验性WebSocket
下一页
使用Java
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,以Apollo GraphQL的名义。

隐私政策

公司