我正在尝试从我的 graphQL api 获取多个下拉菜单的可能值。
例如,假设我有这样的架构:
type Employee {
id: ID!
name: String!
jobRole: Lookup!
address: Address!
}
type Address {
street: String!
line2: String
city: String!
state: Lookup!
country: Lookup!
zip: String!
}
type Lookup {
id: ID!
value: String!
}
职位 , 城市和 状态 是所有具有预先确定的值列表的字段,这些值在应用程序周围表单的各种下拉列表中需要。
在这种情况下,模式设计的最佳实践是什么?我正在考虑以下选项:
query {
lookups {
jobRoles {
id
value
}
}
}
这具有数据驱动的优势,因此我可以更新我的工作角色而无需更新我的架构,但我可以看到这变得很麻烦。我只添加了一些业务对象,并且在我的模式中已经有大约 25 种不同类型的查找,当我向 API 添加更多数据时,我需要以某种方式维护用于正确字段的正确查找,处理在多个地方使用的一般查找与仅适用于一个字段的超特定查找等。
有没有其他人遇到过类似的问题,是否有一个好的设计模式来处理这个问题?
为了记录,我不想使用带有自省(introspection)的枚举有两个原因。
//bad
enum jobRole {
MANAGER
ENGINEER
SALES
}
//needed
[
{
id: 1,
value: "Manager"
},
{
id: 2,
value: "Engineer"
},
{
id: 3,
value: "Sales"
}
]
编辑
我想再举一个例子说明为什么枚举可能不起作用。我们有很多描述应该显示在包含特殊字符的下拉列表中。
// Client Type
[
{
id: 'ENDOW',
value: 'Foundation/Endowment'
},
{
id: 'PUBLIC',
value: 'Public (Government)'
},
{
id: 'MULTI',
value: 'Union/Multi-Employer'
}
]
还有一些更糟糕,它们有 <、>、% 等。其中一些是完整的句子,因此枚举的限制性命名确实不适用于这种情况。我倾向于只做一堆查找查询并将每个查找视为一个不同的业务对象
最佳答案
我找到了一种让枚举按我需要的方式工作的方法。我可以通过将其放入 description 中来获取该值
这是我的 gql 架构定义
enum ClientType {
"""
Public (Government)
"""
PUBLIC
"""
Union/Multi-Employer
"""
MULTI
"""
Foundation/Endowment
"""
ENDOW
}
当我用这样的自省(introspection)查询检索它时
{
__type(name: "ClientType") {
enumValues {
name
description
}
}
}
我以我正在寻找的确切结构获得我的数据!
{
"data": {
"__type": {
"enumValues": [{
"name": "PUBLIC",
"description": "Public (Government)"
}, {
"name": "MULTI",
"description": "Union/Multi-Employer"
}, {
"name": "ENDOW",
"description": "Foundation/Endowment"
}]
}
}
}
这正是我需要的。我可以使用我们描述中的所有特殊字符、数字等。如果有人想知道如何使我的架构与我们的数据库保持同步,我有一个简单的代码生成脚本,它查询存储此信息的表并生成一个导出所有这些枚举的 enums.ts 文件。每当数据更新时(这种情况并不经常发生),我只需重新运行代码生成器并将架构更改发布到生产环境。
关于graphql - 如何构建我的 graphql 模式以允许检索可能的下拉值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57517157/